Jsf 如何处理-SESN0008E用户试图访问WebSphere上用户拥有的会话

Jsf 如何处理-SESN0008E用户试图访问WebSphere上用户拥有的会话,jsf,error-handling,websphere,forms-authentication,Jsf,Error Handling,Websphere,Forms Authentication,我正在使用表单Auth处理JSF应用程序 由于SESN0008E错误处理,我陷入困境。我理解,当登录用户想要作为另一个用户进行身份验证,而登录用户会话仍然存在时,会发生错误 现在,当用户进入登录页面时,可以检查他是否已登录。若他通过身份验证,我只需将他重定向到主页 然而,错误仍然可以复制-只需在两个选项卡中打开登录页面并登录到不同的帐户 对于登录,我使用simple login.xhtml: <?xml version="1.0" encoding="UTF-8"?> <!DO

我正在使用表单Auth处理JSF应用程序

由于SESN0008E错误处理,我陷入困境。我理解,当登录用户想要作为另一个用户进行身份验证,而登录用户会话仍然存在时,会发生错误

现在,当用户进入登录页面时,可以检查他是否已登录。若他通过身份验证,我只需将他重定向到主页

然而,错误仍然可以复制-只需在两个选项卡中打开登录页面并登录到不同的帐户

对于登录,我使用simple login.xhtml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:p="http://primefaces.org/ui">
<h:body>
    <ui:composition template="/WEB-INF/template/login/layout.xhtml">
        <ui:define name="content">

            <p:outputLabel value="#{loginHandler.alreadyLoggedRedirect()}"></p:outputLabel>

            <form action="j_security_check" method="post">
                <p:panelGrid id="loginContentPanel" columns="2">
                    <p:outputLabel for="j_username" value="Username" />
                    <p:inputText id="j_username" />
                    <p:outputLabel for="j_password" value="Password" />
                    <p:password id="j_password"></p:password>
                    <f:facet name="footer">
                        <div id="loginButtonCenter">
                            <h:commandButton id="loginButton"
                                styleClass="ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only"
                                value="Login" />
                        </div>
                    </f:facet>
                </p:panelGrid>
            </form>

        </ui:define>
    </ui:composition>
</h:body>
</html>

当用户已经登录时,loginHandler.alreadyLoggedDirect()处理重定向

下面是web.xml的一部分:

<login-config>
    <auth-method>FORM</auth-method>
    <realm-name>User Auth</realm-name>
    <form-login-config>
        <form-login-page>/login.xhtml</form-login-page>
        <form-error-page>/login.xhtml?s=err</form-error-page>
    </form-login-config>
</login-config>

<security-constraint>
    <web-resource-collection>
        <web-resource-name>User Auth</web-resource-name>
        <url-pattern>/admin/*</url-pattern>
    </web-resource-collection>
    <auth-constraint>
        <role-name>admin</role-name>
    </auth-constraint>
</security-constraint>

<security-role>
    <role-name>admin</role-name>
</security-role>

形式
用户身份验证
/login.xhtml
/login.xhtml?s=err
用户身份验证
/管理员/*
管理
管理
我想知道是否可以处理此异常并自动注销当前用户?


我只想在新用户登录尝试时注销当前用户。

创建一个servletfilter,用于检查登录页面的请求(以及登录信息发布到的url)。若用户已通过身份验证,则将用户重定向到其他地方。将此过滤器设置为过滤器链中的第一个过滤器。如果需要,也可以在此处使会话无效。基本上这是SessionCheckFilter

是否有理由为经过身份验证的用户显示登录页面?此筛选器还可以检查是否允许用户访问登录页面

如果从SessionCheckFilter传递-> Jsf2概念

    <ui:fragment rendered="#{myRequestScopeBean.userAuthenticated}">
  Hello  user name etc.</ui:fragment>
<ui:fragment rendered="#{not myRequestScopeBean.userAuthenticated}">
 Show login form
</ui:fragment>

你好,用户名等。
显示登录表单

创建一个servletfilter,用于检查登录页面的请求(以及登录信息发布到的url)。若用户已通过身份验证,则将用户重定向到其他地方。将此过滤器设置为过滤器链中的第一个过滤器。如果需要,也可以在此处使会话无效。基本上这是SessionCheckFilter

是否有理由为经过身份验证的用户显示登录页面?此筛选器还可以检查是否允许用户访问登录页面

如果从SessionCheckFilter传递-> Jsf2概念

    <ui:fragment rendered="#{myRequestScopeBean.userAuthenticated}">
  Hello  user name etc.</ui:fragment>
<ui:fragment rendered="#{not myRequestScopeBean.userAuthenticated}">
 Show login form
</ui:fragment>

你好,用户名等。
显示登录表单

尝试使登录页面(login.xhtml)中的会话无效。这样,您应该在登录时始终获得新会话。尝试在登录页面(login.xhtml)中使会话无效。这样,您应该在登录时始终获得新会话。