首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JavaEE LoginContext

JavaEE LoginContext
EN

Stack Overflow用户
提问于 2014-04-30 06:42:34
回答 1查看 695关注 0票数 0

我正在尝试像Servlet请求所提供的那样在EJB中进行手动登录。

到目前一切尚好。我实现了CallbackHandler:

代码语言:javascript
复制
public class PasswordCallbackHandler implements CallbackHandler {
    private String username;
    private char[] password;

    public PasswordCallbackHandler(String username, char[] password) {
        super();
        this.username = username;
        this.password = password;
    }

    public void handle(Callback[] callbacks) throws IOException,
            UnsupportedCallbackException {
        if(callbacks == null) {
            return;
        }

        for (int i = 0; i < callbacks.length; i++) {
            if (callbacks[i] instanceof NameCallback) {
                NameCallback nc = (NameCallback) callbacks[i];
                nc.setName(username);
            } else if (callbacks[i] instanceof PasswordCallback) {
                PasswordCallback pc = (PasswordCallback) callbacks[i];
                pc.setPassword(password);
            } else {
                throw new UnsupportedCallbackException(callbacks[i],
                        "Unrecognized Callback");
            }
        }
    }
}

我的守则:

代码语言:javascript
复制
    PasswordCallbackHandler handler = new PasswordCallbackHandler("user", "password".toCharArray());
    LoginContext context = new LoginContext("realm", handler);
    context.login();

这一主题表明:

代码语言:javascript
复制
Subject:
    Principal: user
    Principal: Roles(members:ADMIN,USER)
    Principal: CallerPrincipal(members:user)

所以登录本身起作用了。我现在的问题是我拿它做什么?当我从容器中获取当前主体时,我仍然收到匿名消息。在JBoss 7.1和野生蝇上进行了检测。

代码语言:javascript
复制
    @Resource
    private SessionContext ctx;

Principal callerPrincipal = ctx.getCallerPrincipal();
if(callerPrincipal == null) {
    return null;
}

String playerName = callerPrincipal.getName(); // Also after login() it returns anonymous.

所以我误解了这个功能吗?我需要这门课做什么?在容器接受新用户凭据的情况下,我将如何登录?

当我在过滤器中使用Servlet中的login()时,它可以工作。

你好,M

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-09-20 12:50:20

主题才是关键。我忽略了doAs()。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23381313

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档