环境:WebSphere AS 9.0.0.10。
我正在尝试登录我的应用程序(http://myhost:9080/myapp/login.xhtml),该应用程序部署在 WAS 并接下来登录 WAS 管理控制台(https://myhost:9043/ibm/console)。
在下一个浏览器选项卡中成功登录我的应用程序后,我尝试由另一个用户登录到管理控制台。它返回我 500 HTTP 代码和日志:
SESN0008E: A user authenticated as anonymous has attempted to access a session owned by user:defaultWIMFileBasedRealm/CN=dv,OU=Users,OU=S,DC=c,DC=s,DC=u.
SESN0008E: A user authenticated as user:defaultWIMFileBasedRealm/uid=uadm,o=defaultWIMFileBasedRealm has attempted to access a session owned by user:defaultWIMFileBasedRealm/CCN=dv,OU=Users,OU=S,DC=c,DC=s,DC=u.
我猜这在某种程度上与 LTPA 令牌有关。由于我的应用程序和管理控制台位于一个主机中,它们有一个“LtpaToken2”cookie。当我登录我的应用程序时,我得到用户“dv”的 LTPA,当我登录 ibm/console 时,我得到用户“uadm”的 LTPA,LTPA 替换了“LtpaToken2”cookie。如果我手动返回以前的“LtpaToken2”cookie,我可以再次打开管理控制台,但在尝试登录时,我得到了一个新的 LTPA 和 500 HTTP 代码。我试图在服务器上禁用“安全集成”,但它没有提供任何东西。
验证过滤器
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) request;
HttpSession session = req.getSession(true);
WebUser user = (WebUser) session.getAttribute(Constants.webuser);
Principal principal = req.getUserPrincipal();
String jUserLogin = req.getParameter(Constants.jUserLogin);
String jUserPassword = req.getParameter(Constants.jUserPassword);
if (StringUtils.isNotEmpty(jUserLogin)) {
loginBean.setjUserLogin(jUserLogin);
byte[] loginBytes = (jUserLogin + ":" + jUserPassword).getBytes();
String encoded = DatatypeConverter.printBase64Binary(loginBytes);
session.setAttribute(Constants.userLogin, encoded);
}
if (user == null && principal != null) {
user = new WebUser();
loginUser(req, session, user, principal);
}
chain.doFilter(request, response);
}
private void loginUser(HttpServletRequest req, HttpSession session, WebUser user, Principal principal) {
WebUser oldUser = (WebUser) session.getAttribute(Constants.webuser);
user.clean();
user.setLogin(principal.getName());
user.setPass(session.getAttribute(Constants.userLogin));
session.setAttribute(Constants.webuser, user);
}
登录.xhtml
<form action="j_security_check" method="POST">
<p:panel styleClass="login-panel block_center" header="LoGIn" style="width:400px;">
<p:panelGrid columns="1" styleClass="no_border_panel_grid" columnClasses="panel_grid_column_250px" style="width: 100%; text-align: center">
<p:inputText id="j_username" placeholder="Login"/>
<p:password id="j_password" placeholder="Pass"/>
<input id="my_button_5" type="submit"
style="width: 77%; margin: 0; padding: 9px; margin-top: 10px" value="Log in"/>
</p:panelGrid>
</p:panel>
</form>
它有什么问题?我不知道(