通过JAAS手动登录用户到JBoss WIldfly

时间:2014-08-21 14:25:05

标签: java jboss jaas

我正在尝试执行手动登录。我的目的是通过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类,这是一条追求的道路吗?

提前致谢

1 个答案:

答案 0 :(得分:0)

好的解决方案太简单了,以前我还没有发现它几乎是一种耻辱。提示是在这个链接: https://issues.jasig.org/browse/CASC-174

Servlet 3.0已

request.login(username, password)

完成我所需要的所有方法。