Apache Wink Client - Test einen REST-Dienst unter Verwendung des Formulars auth

Ich versuche, mit den Wink RestClient Funktions-Test auf einem Rest-service-Endpunkt. Ich verwende mocks für unit-Tests, aber ich würde gerne funktional testen Sie als Endpunkt der Verbraucher.

Ich verstehen, einige werden Gegenstand für mich der Aufruf eines REST-Endpunktes, während die Verwendung von Formular-basierte auth aber das ist die aktuelle Architektur, die ich habe.

Die Mehrheit der Ressourcen, die ich testen möchte sind geschützte Ressourcen und die Anwendung (läuft auf Tomcat6) geschützt ist, durch die form der Authentifizierung. (wie in der unten web.xml snippet).

Was ich bisher ausprobiert habe ist eine erste Anruf an eine ungeschützte Ressource zu erhalten, die set-cookie-header, enthält JSESSIONID und verwenden Sie die JSESSIONID in den header ( über die Ressource.cookie () ), die in nachfolgenden Anfragen aber, die keine Frucht bringen.

web.xml

<login-config>
    <auth-method>FORM</auth-method>
    <form-login-config>
        <form-login-page>/login.html</form-login-page>
        <form-error-page>/login.html?failure=true</form-error-page>
    </form-login-config>
</login-config>

Meinen Wink RestClient-code sieht wie folgt aus. Alle Antworten sind 200, aber zwei Dinge, die ich bemerken, dass die Reaktion auf den Aufruf von /j_security_check/beinhaltet nicht das jsessionid-cookie, und der Anruf auf die geschützte Ressource an, sagte, ich hätte ein signin scheitern. Die Nutzlast für den Aufruf j_security_check wurde gefangen genommen, die direkt aus einer vorherigen erfolgreichen browser-Anfrage abgefangen.

ClientConfig config = new ClientConfig();
config.setBypassHostnameVerification(true);
RestClient restClient = new RestClient(config);

Resource unprotectedResource = restClient.resource( BASE_URL + "/");
unprotectedResource.header( "Accept", "*/*" );
ClientResponse clientResponse = unprotectedResource.get();
String response = clientResponse.getEntity(String.class);

//get jSession ID
String jSessionId = clientResponse.getHeaders().get("set-cookie").get(0);
jSessionId = jSessionId.split(";")[0];
System.out.println(jSessionId);

//create a request to login via j_security_check
Resource loginResource = restClient.resource(BASE_URL + "/j_security_check/");
loginResource.accept("text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
loginResource.header("referer", "http://localhost:8080/contextroot/");
loginResource.cookie( jSessionId );
loginResource.header("Connection", "keep-alive");
loginResource.header("Content-Type", "application/x-www-form-urlencoded");
loginResource.header("Content-Length", "41");

ClientResponse loginResponse = loginResource.post("j_username=*****&j_password=*************");

/*  the loginResponse, as this point, does not have the jsessionid cookie, my browser client does */

Resource protectedResource = restClient.resource(BASE_URL + "/protected/test/");
systemResource.accept("application/json");
systemResource.cookie( jSessionId );

ClientResponse systemResponse = systemResource.get();
response = clientResponse.getEntity(String.class);
System.out.println(response);

Irgendwelche Gedanken oder Erfahrungen mit dem Wink RestClient auszuüben form-auth-geschützten Ressourcen, wäre sehr dankbar. Ich glaube, ich würde unterhalten anderen frameworks, die ich gehört habe, der REST-Versicherte und andere, aber da die Anwendung nutzt Augenzwinkern und der RestClient scheint mir, was ich brauche, ich dachte, ich würde stick mit.

Stellt sich heraus, j_security_check antwortet mit einer [#302 Zeitweilig Verschoben] - Wenn ich abzufangen, den Antrag mit einem sniffer und fügen Sie den JSESSIONID cookie " auf, die umgeleitete Anforderung, es ist alles gut. Problem ist, ich kann nicht scheinen, um an die von den wink RestClient Objekts oder die Ressource-oder Response -) Objekt. Die Umleitung geschieht hinter den kulissen. Weiß jemand, wie weisen Sie der Ressource.post () - Methode zum BEENDEN auf eine Umleitung, oder die ClientResponse Falle für die Umleitung? Ich kann nicht einen Weg finden, noch.

InformationsquelleAutor rogodeter | 2013-03-01

Schreibe einen Kommentar