我正在尝试执行手动登录。我的目的是通过JAX-RS呼叫记录某人,但是在标准会话中。这样,后续的javascript调用以及java调用都将看到相同的Subject,Principal等。这一切都发生在使用Picketlink的SSO的上下文中,我需要向用户显示他当前的登录状态,以及允许他在后台登录。
我创建了自己的LoginModule,它与j_security完美配合。 我创建了一个JAX-RS资源,它启动一个LoginContext并将用户登录。我的LoginModule在后台被询问,登录完美。几乎。因为存在一个小问题,所以登录不与http请求或会话相关联。
@POST @Path("login")
public LoginResponse login(LoginForm loginForm, @Context HttpServletRequest request) throws LoginException{
LoginResponse ret = new LoginResponse();
LoginContext loginContext = new LoginContext("idp", new WidgetCallBackHandler(loginForm));
System.out.println("User principal before: "+request.getUserPrincipal());
try{
loginContext.login();
}catch(LoginException e){
ret.setMessage("Login failed: "+e.getMessage());
}
Subject subject = loginContext.getSubject();
System.out.println("Logged in subject: "+subject);
System.out.println("User principal after: "+request.getUserPrincipal());
System.out.println("Login executed");
ret.setState(getLoginState(request));
return ret;
}
两个Principals,之前和之后都为null。所以我能够正确地验证用户,但它完全没有意义,因为我无法将会话与登录的主题相关联。
我读过以前的JBoss版本中有一个WebAuthenticator类,这是一条追求的道路吗?
提前致谢
答案 0 :(得分:0)
好的解决方案太简单了,以前我还没有发现它几乎是一种耻辱。提示是在这个链接: https://issues.jasig.org/browse/CASC-174
Servlet 3.0已
request.login(username, password)
完成我所需要的所有方法。