一个很简单的要求。登录到 Web J2EE 6 应用程序后,如何让用户再次注销?
我见过的大多数(全部?)书籍和教程都展示了如何向他们的应用程序添加登录/登录错误页面,并使用“j_security_check”方法演示安全主体/角色/领域等的使用——一切都很好。但是目前还不清楚如何赋予用户注销的权力。确实,我如何在会话超时等之后强制注销?
一个很简单的要求。登录到 Web J2EE 6 应用程序后,如何让用户再次注销?
我见过的大多数(全部?)书籍和教程都展示了如何向他们的应用程序添加登录/登录错误页面,并使用“j_security_check”方法演示安全主体/角色/领域等的使用——一切都很好。但是目前还不清楚如何赋予用户注销的权力。确实,我如何在会话超时等之后强制注销?
您应该logout servlet/jsp
使用以下方式使会话无效:
session.invalidate() method
which 也会使会话无效。 HttpServletRequest.logout()
,它只使安全上下文无效并且会话仍然存在。而且,应用程序 UI 应该提供一个链接来调用它logout servlet/jsp
问题:确实,我如何在会话超时等之后强制注销?
答: web.xml 中的<session-timeout>
内容允许您定义超时值,在此之后会话将被服务器无效。
您可以使用logout()
-Method 以编程方式进行HttpServletRequest
。也有相应的使用用户名和密码登录的方法。这些方法已添加到 Servlet 3.0 中,因此它们在 Java EE 6 中可用。
超时是一种不同的野兽,可以web.xml
按如下方式指定:
<session-config>
<session-timeout>30</session-timeout>
</session-config>
时间单位是分钟。
两步过程 -
1.创建注销页面
2.使用注销方法创建会话bean
步骤 A:注销页面
<div class="mytext">
<p>Hello #{userSession.username}, </p>
<p><h:outputText value="It doesn't seem you're logged in anyway..." rendered="#{!userSession.userLoggedIn}" /></p>
</div>
<h:form class="mytext" rendered="#{userSession.userLoggedIn}" >
<h:panelGrid columns="2" >
<h:outputLabel value="Do you want to logout?" for="logout" />
<p:commandButton value="Logout" id="logout" action="#{userSession.logout}" />
</h:panelGrid>
</h:form>
步骤 B:会话 Bean 支持代码(片段)
public String logout() {
HttpSession session = (HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession(true);
session.invalidate();
return "/index?faces-redirect=true";
}
public boolean isUserLoggedIn() {
String user = this.getUsername();
boolean result = !((user == null)|| user.isEmpty());
return result;
}
/** Get the login username if it exists */
public String getUsername() {
String user = FacesContext.getCurrentInstance().getExternalContext().getRemoteUser();
return user;
}