我正在尝试像Servlet请求所提供的那样在EJB中进行手动登录。
到目前一切尚好。我实现了CallbackHandler:
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");
}
}
}
}我的守则:
PasswordCallbackHandler handler = new PasswordCallbackHandler("user", "password".toCharArray());
LoginContext context = new LoginContext("realm", handler);
context.login();这一主题表明:
Subject:
Principal: user
Principal: Roles(members:ADMIN,USER)
Principal: CallerPrincipal(members:user)所以登录本身起作用了。我现在的问题是我拿它做什么?当我从容器中获取当前主体时,我仍然收到匿名消息。在JBoss 7.1和野生蝇上进行了检测。
@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
发布于 2014-09-20 12:50:20
主题才是关键。我忽略了doAs()。
https://stackoverflow.com/questions/23381313
复制相似问题