i'm trying create automated, end end, tests webapp making rest calls (using retrofit). our rest calls protected spring security, have login first.
to best understanding, need call /j_spring_security_check user/password, returned "set-cookie" response header , set "cookie" request header on each rest call perform.
it seems call spring login "page" successful have implemented applicationlistener logs each successful login attempt, however, returned response call j_spring_security_check has status 200 (should 302 apps redirects after successful login) , body of response login page itself.
what doing wrong?
the login retrofit interface:
@formurlencoded @post("/j_spring_security_check") response basiclogin(@field("user") string user, @field("password") string pwd); the code call spring's login:
public static void login(string user, string pwd) { portalloginservice loginservice = portalrestadapter.getinstance().createloginservice(); response response = loginservice.basiclogin(user, pwd); string setcookieheader = getsetcookieheader(response.getheaders()); authcookieinterceptor.getinstance().setsessionid(setcookieheader); } private static string getsetcookieheader(list<header> headers) { (header header : headers) { if (set_cookie_header_name.equals(header.getname())) { return header.getvalue(); } } return null; } code of authcookieinterceptor intercpet method:
@override public void intercept(requestfacade requestfacade) { if (sessionid != null) { requestfacade.addheader("cookie", sessionid); } } the rest adapter init:
restadapter = new restadapter.builder() .setrequestinterceptor(authcookieinterceptor.getinstance()) .setendpoint(portal_url) .setloglevel(restadapter.loglevel.full) .build(); so i'm making call login, , setting returned session id login response on each request make after (using request interceptor)
thanks lot
you need change name of parameters passed, j_spring_security_check expecting j_username , j_password instead of
response basiclogin(@field("user") string user, @field("password") string pwd); also, because in case of call, spring framework returning html response (keep in mind doing post servlet), need set our converter, need this:
simplexmlconverter converter = new simplexmlconverter(); restadapter adapter = builder.setloglevel(restadapter.loglevel.full).setconverter(converter).build(); then simple call one:
response response = loginclient.getservice().login("john", "john1"); and response object, can information need
Comments
Post a Comment