0

环境: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>

它有什么问题?我不知道(

4

0 回答 0