java - cant get correct session id to login to spring security with retrofit -


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