Mam następujący scenariusz:W jaki sposób można uwierzytelnić przy użyciu klienta Jersey na serwerze obsługującym JAAS?
Serwer: Jetty (ze skonfigurowanym JAAS)
klient: Jersey wywoływany poprzez JUnit (przez Maven)
mam JAAS skonfigurować na serwerze WWW. Używam części klienta jako testu.
Użytkownicy po stronie serwera są uwierzytelniani za pomocą formularza z podstawowym uwierzytelnianiem obsługiwanym przez JAAS. Oczywiście użytkownicy muszą zostać uwierzytelnieni, zanim będą mogli przeglądać określone strony.
Chciałbym móc zalogować się przez Jersey przed próbą uzyskania dostępu do zabezpieczonej strony. Jak to zrobić? Sprawdziłem, że możesz zdefiniować filtr, ale nie jestem do końca pewien, jak go użyć. A kiedy użytkownik jest zalogowany za pomocą formularza, jak mogę przejść (od strony klienta) do strony, którą naprawdę interesuję?
Byłbym bardzo wdzięczny, gdyby ktoś mógł mi pokazać przykład, jak to zrobić po stronie klienta z Jersey.
Mam następujący test JUnit przypadku metody:
@Test
public void testLogin()
throws IOException
{
String URL_LOGIN = "http://localhost:9080/foo/auth.html";
Client client = Client.create();
String username = "me";
String password = "me";
final HTTPBasicAuthFilter authFilter = new HTTPBasicAuthFilter(username, password);
client.addFilter(authFilter);
client.addFilter(new LoggingFilter());
WebResource webResource = client.resource(URL_LOGIN);
// I even tried:
// webResource.header("Authorization", "Basic " + "base64encoded_userid:password").type("application/xml");
String page = webResource.post(String.class);
System.out.println(page);
}
Proszę uwaga:
1) http://localhost:9080/foo/auth.html jest strona ja ma być wyświetlany po pomyślnym auth.
2) Rzeczywiście widzę wyjście http://localhost:9080/foo/login.html.
3) Oczywiście, za pomocą przeglądarki, mogę z powodzeniem zalogować się za pomocą strony login.html.
Czego tu brakuje?
Martin, dzięki za ten przykład! Wydaje mi się, że to jest to, o co prosiłem. Jednak w wyniku 'odpowiedzi' uzyskuję stronę logowania ('/foo/login.html'), zamiast strony '/ foo/auth.html', która powinna wydrukować, że jestem zalogowany. Brak tu? Próbowałem twój przykład dokładnie taki, jaki jest, z wyjątkiem poprawienia com.sun.jersey.representation.Form do com.sun.jersey.representation.api.Form. – carlspring
Użyj filtru logowania i sprawdź, jak wyglądają żądania i odpowiedzi - w szczególności odpowiedź na wpis. Sprawdź, czy serwer wysyła Set-Cookie w odpowiedzi i czy kolejne żądania klienta zawierają plik cookie. Również odpowiedź otrzymasz z postu - jeśli logowanie powiodło się, czy nie. Nie wiesz, czy w przypadku logowania formularza musisz najpierw spróbować zażądać chronionej strony, a dopiero potem zaloguj się - spróbuj. Zobacz także, jak wygląda strona login.html - jeśli naprawdę używa ona parametrów j_security_check i j_username oraz j_password. –
Martin, używa j_security_check i j_username/j_password. Mam włączone logowanie twojego przykładu, aby zobaczyć nagłówki. Mam następujące wyniki, które opublikowałem na temat pastebin: http://pastebin.com/dGMHpk7g Być może mógłbyś również rzucić okiem ...? – carlspring