7

我试图通过以编程方式登录这样的用户(剥离异常处理),在不同的身份验证下运行 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();
    }           
}); 

作品登录newuser(调用LoginModule成功)但未Subject.doAs()将新主题与EJBContext. run()-Method中的代码仍然从EJBContext.

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

Subject caller = (Subject) PolicyContext.getContext("javax.security.auth.Subject.container");

有任何想法吗?

4

2 回答 2

2

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

于 2012-10-13T09:34:26.310 回答
0

我的理解是 JBoss AS 7.1 目前不支持这一点。看到这个线程

编辑

我在这里写的是错误的,该线程仅适用于客户端登录(在 JBoss 之外)。

于 2012-10-13T10:51:11.827 回答