我想从之前部署在bea weblogic中的Web应用程序转换现有的api。我现在需要到JBoss EAP 7为什么Subject.doAs会根据登录用户而不是交换主题返回主体?
在我的用户登录代码部署该应用程序时,我做的,像这样的servlet认证:
HttpServletRequest request = ServletActionContext.getRequest();
request.login("user1", "password");
testEJB= (TestEJB) LookupUtil.lookup("TestEJB");
System.out.println("logged in user: " + testEJB.getName()); //returns user1
现在sessionContext在每一个EJB抬头由容器返回登录用户,这是完美的,除了一些应用程序功能需要切换用户和做一些特权行动,例如上传文件。
我交换用户以及执行像这样的特权行动:
LoginContext loginContext = new LoginContext("TestLoginContext", new UsernamePasswordHandler("user2", "password"));
loginContext.login();
String newUser = (String) Subject.doAs(loginContext.getSubject(), new TestPrivilegedAction());
System.out.println("privileged User: " + newUser); //still returns user1
以我TestPrivilegedAction它实现的PrivilegedAction,我有以下代码:
@Override
public Object run() {
return this.getSwitchedUser();
}
private Object getSwitchedUser() {
testEJB= (TestEJB) LookupUtil.lookup("TestEJB");
System.out.println("logged in user: " + testEJB.getName());
}
基本上,使用的原始API时该应用程序部署在weblogic中:
Authenticate.authenticate
Security.runAs
LoginContext.login
Subject.doAs
那么,为什么现在它仍返回登录的用户(用户1),即使认证成功,并且主题已被设置为:...然后我有以下使它在JBoss的工作取代了它user2的?我一直在寻找网络,并试图看看我是否只是缺少一些配置,但我现在真的坚持下去。我很欣赏任何反馈或建议。