2011-12-05 11 views
5

Próbuję napisać prosty test dymu dla aplikacji internetowej.Przekazywanie podstawowych poświadczeń uwierzytelniających przy każdym żądaniu za pomocą HtmlUnit WebClient

Aplikacja zwykle korzysta z uwierzytelniania opartego na formularzach, ale akceptuje także podstawowy uwierzytelnienie, ale ponieważ domyślnie jest to uwierzytelnianie oparte na formularzach, nigdy nie wysyła wymaganego uwierzytelnienia, ale zamiast tego po prostu wysyła formularz logowania.

W teście próbuję wysłać nagłówek podstawowego uwierzytelniania przy użyciu

WebClient webClient = new WebClient(); 

DefaultCredentialsProvider creds = new DefaultCredentialsProvider(); 

// Set some example credentials 
creds.addCredentials("usr", "pwd"); 

// And now add the provider to the webClient instance 
webClient.setCredentialsProvider(creds); 

webClient.getPage("<some url>") 

Próbowałem też farsz poświadczeń w obiekcie WebRequest i mimochodem, że metody webClient.getPage.

Ale na serwerze nie dostaję nagłówka uwierzytelniania. Podejrzewam, że WebClient wysyła tylko nagłówek uwierzytelniania, jeśli otrzyma jawnie żądanie od serwera, co nigdy się nie zdarza.

Pytanie więc, w jaki sposób mogę sprawić, aby WebClient wysyłał nagłówek uwierzytelniania na każde żądanie, w tym pierwsze?

+0

nie jestem jasne, co masz na myśli przez „tylko wysyła formularz logowania” - - czy pojawia się na stronie w twojej aplikacji? Właśnie wykopałem stary kod testujący witrynę za pomocą okien dialogowych uwierzytelniania przeglądarki, wstawionych przez niektóre zabezpieczenia domenowe, a nie przez aplikację. Zasadniczo zrobiłem dokładnie tak, jak ty, co sprawdziło się dobrze. –

+0

W ten sposób aplikacja jest zaimplementowana. Podstawowa autoryzacja dotyczy tylko testów i innych urządzeń współpracujących z aplikacją. Nie chcemy, aby użytkownik kiedykolwiek widział paskudną podstawową formę uwierzytelnienia wygenerowaną przez przeglądarkę. –

Odpowiedz

15

To może pomóc:

WebClient.addRequestHeader(String name, String value)

Bardziej szczegółowe można utworzyć nagłówek uwierzytelniania takiego

private static void setCredentials(WebClient webClient) 
    { 
    String username = "user"; 
    String password = "password"; 
    String base64encodedUsernameAndPassword = base64Encode(username + ":" + password); 
    webClient.addRequestHeader("Authorization", "Basic " + base64encodedUsernameAndPassword); 
    } 

    private static String base64Encode(String stringToEncode) 
    { 
    return DatatypeConverter.printBase64Binary(stringToEncode.getBytes()); 
    } 
Powiązane problemy