我正在尝试从以前部署在 bea weblogic 中的 web 应用程序转换现有的 api。我现在需要在 JBoss EAP 7 中部署这个应用程序。
在我的用户登录代码中,我正在执行 servlet 身份验证,如下所示:
HttpServletRequest request = ServletActionContext.getRequest();
request.login("user1", "password");
testEJB= (TestEJB) LookupUtil.lookup("TestEJB");
System.out.println("logged in user: " + testEJB.getName()); //returns user1
现在容器查找到的每个 EJB 中的 sessionContext 都会返回登录的用户,这很完美,只是一些应用程序功能需要切换用户并执行一些特权操作,例如上传文档。
我正在切换用户并执行特权操作,如下所示:
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
在实现 PrivilegedAction 的 TestPrivilegedAction 中,我有以下代码:
@Override
public Object run() {
return this.getSwitchedUser();
}
private Object getSwitchedUser() {
testEJB= (TestEJB) LookupUtil.lookup("TestEJB");
System.out.println("logged in user: " + testEJB.getName());
}
基本上,在 weblogic 中部署应用程序时使用的原始 api 是:
Authenticate.authenticate
Security.runAs
...然后我将其替换为以下内容以使其在 JBoss 中工作:
LoginContext.login
Subject.doAs
那么为什么现在它仍然返回登录用户(user1),即使身份验证成功并且主题已经设置为 user2?我一直在网上搜索并试图看看我是否只是缺少一些配置,但我现在真的坚持下去了。我感谢任何反馈或建议。