我正在使用Form Auth。
处理我的JSF应用程序由于SESN0008E错误处理,我陷入困境。我知道当记录的用户想要作为另一个用户进行身份验证时会发生错误,而记录的用户会话仍然存在。
现在可以检查用户是否在登录页面时登录。如果他经过身份验证,我只需将他重定向到主页。
但是仍然可以重现错误 - 只需在两个选项卡中打开登录页面并登录到不同的帐户。
登录时我使用的是简单的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.alreadyLoggedRedirect()在用户已登录时处理重定向。
这是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>
我想知道我是否可以自动处理此异常并注销当前用户?
我只是想在新用户登录尝试时注销当前用户。
答案 0 :(得分:0)
创建一个servletfilter,用于检查登录页面的请求(以及发布loginform的URL)。如果用户已通过身份验证,则将用户重定向到其他位置。将此过滤器设置为过滤器链中的第一个过滤器如果需要,您也可以在此处使会话无效。基本上这是SessionCheckFilter。
是否有理由为经过身份验证的用户显示登录页面?此过滤器还可以检查是否允许用户访问登录页面。
如果从SessionCheckFilter传递 - &gt; Jsf2概念
<ui:fragment rendered="#{myRequestScopeBean.userAuthenticated}">
Hello user name etc.</ui:fragment>
<ui:fragment rendered="#{not myRequestScopeBean.userAuthenticated}">
Show login form
</ui:fragment>