通过JAAS以编程方式登录用户

roe*_*ijn 6 java jboss jaas jboss7.x

我试图通过以编程方式登录这样的用户(剥离的异常处理)在不同的身份验证下在JBoss Container中运行代码:

LoginContext ctx = ctx = 
    new LoginContext("MyLoginSchema", 
        new UsernamePasswordCallbackHandler("newuser", "")
    );
ctx.login();

Subject.doAs(ctx.getSubject(), new PrivilegedAction<T>() {
    @Override
    public T run() {
        Subject.getSubject(AccessController.getContext());
        InitialContext ic = new InitialContext();
        EJBContext sctxLookup = (EJBContext) ic.lookup("java:comp/EJBContext");
        Principal principal = sctxLookup.getCallerPrincipal();
    }           
}); 
Run Code Online (Sandbox Code Playgroud)

登录newuser作品(呼叫LoginModule成功),但Subject.doAs()不将新主题与EJBContext.run()-Method中的代码仍然从中获取旧用户的主体EJBContext.

我测试了另一种检索登录用户但方法相同的方法:

Subject caller = (Subject) PolicyContext.getContext("javax.security.auth.Subject.container");
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

小智 2

LoginModule你现在用哪个?在 JBoss 6.1 中,您必须ClientLoginModule在容器中进行身份验证。