Sprawdzenie zmiany zachowania w przypadku adresów URL zawierających znak plus

Ta reguła oznacza flagą adresy URL, które zawierają znak („+”) niebędący częścią parametrów zapytania adresu URL. W przypadku kodu Java ta reguła skanuje konstruktory java.net.URL i sprawdza parametry użyte do utworzenia adresu URL. Ta reguła szuka znaku plus w adresie URL, ale nie w parametrach zapytania. Parametry zapytania obejmują wszystkie elementy znajdujące się po prawej stronie znaku „?” w adresie URL.

W wersjach wcześniejszych niż WebSphere Application Server 5.1 podczas dekodowania adresu URL dekodowany był cały adres URL, a nie tylko parametry zapytania. Takie zachowanie nie było poprawne. Kontener WWW został zmieniony tak, aby znak plus nie był traktowany jako znak specjalny, gdy nie znajduje się w parametrach zapytania. Powodowało to regresje aplikacji, a w wersji 5.1.1.11 dodano właściwość niestandardową kontenera WWW, aby użytkownik mógł sterować zachowaniem dekodowania znaku plus. Domyślnym zachowaniem tej właściwości niestandardowej jest stare zachowanie, w którym znak plus jest dekodowany w dowolnym miejscu adresu URL.

Jeśli istnieją adresy URL zawierające znak plus, który nie powinien być dekodowany, należy ustawić wartość false dla właściwości niestandardowej com.ibm.ws.webcontainer.decodeURLPlusSign kontenera WWW. Domyślnie dla tego zachowania jest ustawiona wartość true.

Reguła Java sprawdza konstruktory URL, a jeśli jest to możliwe, sprawdza parametry spec, host i file tych konstruktorów w celu określenia, czy nie występują żadne znaki plus. Reguła ta skanuje konstruktory przekazujące literały łańcuchowe lub finalne zmienne łańcuchowe zdefiniowane w tej samej jednostce kompilacji. Jeśli reguła może sprawdzić parametry spec, host lub file, oznaczy flagą tylko te konstruktory, które naruszają tę regułę.

Ponadto ta reguła Java oznaczy flagą instancje konstruktora URL o parametrach spec, host lub file name zakodowane jako zmienne, których nie można sprawdzić.

Przykład 1.


import java.net.URL;

URL url = new URL("http://www.domain.com?id=test&name=plus+sign");
}

W przykładzie 1 reguła nie oznaczy flagą konstruktora URL, ponieważ znak plus znajduje się w parametrach zapytania.

Przykład 2:


import java.net.URL;

URL url = new URL("http://www.domain.com/plus+path?id=test&name=ok");
}

W przykładzie 2 reguła oznaczy flagą konstruktor URL, ponieważ znak plus znajduje się w części adresu URL zawierającej ścieżkę.

Więcej informacji na ten temat zawiera dokumentacja Java dotycząca java.net.URL.