版本:struts2.1.6
執行個體功能:當使用者登陸後,session逾時後則返回到登陸頁面重新登陸。
為了更好的實現此功能我們先將session失效時間設定的小點,這裡我們設定成1分鐘
修改web.xml
<session-config><br /><session-timeout>1</session-timeout><br /></session-config>
此執行個體用到的jsp頁面及登陸所涉及到的相關代碼請參考:
Struts2自訂攔截器執行個體—登陸許可權驗證
實現自訂攔截器類
package com.ywjava.interceptor;</p><p>import java.util.Map;</p><p>import com.opensymphony.xwork2.Action;<br />import com.opensymphony.xwork2.ActionContext;<br />import com.opensymphony.xwork2.ActionInvocation;<br />import com.opensymphony.xwork2.interceptor.AbstractInterceptor;<br />import com.ywjava.action.LoginAction;<br />import com.ywjava.utils.Constants;</p><p>public class SessionIterceptor extends AbstractInterceptor {</p><p>@Override<br />public String intercept(ActionInvocation actionInvocation) throws Exception {<br />ActionContext ctx = ActionContext.getContext();<br />Map session = ctx.getSession();<br />Action action = (Action) actionInvocation.getAction();<br />if (action instanceof LoginAction) {<br />return actionInvocation.invoke();<br />}<br />String userName = (String) session.get(Constants.USER_SESSION);<br />if (userName == null) {<br />return Action.LOGIN;<br />} else {<br />return actionInvocation.invoke();<br />}<br />}</p><p>}<br />
struts.xml中定義並使用此攔截器
<?xml version="1.0" encoding="UTF-8"?><br /><!DOCTYPE struts PUBLIC<br />"-//Apache Software Foundation//DTD Struts Configuration 2.1//EN"<br />"http://struts.apache.org/dtds/struts-2.1.dtd"><br /><struts><br /><package name="authority" extends="struts-default"></p><p><!-- 定義一個攔截器 --><br /><interceptors><br /><interceptor name="authority"<br />class="com.ywjava.interceptor.LoginInterceptor"><br /></interceptor><br /><interceptor name="sessionout"<br /> class="com.ywjava.interceptor.SessionIterceptor"></interceptor><br /><!-- 攔截器棧 --><br /><interceptor-stack name="mydefault"><br /><interceptor-ref name="defaultStack" /><br /><interceptor-ref name="authority" /><br /><interceptor-ref name="sessionout"/><br /></interceptor-stack><br /></interceptors></p><p><!-- 定義全域Result --><br /><global-results><br /><!-- 當返回login視圖名時,轉入/login.jsp頁面 --><br /><result name="login">/login.jsp</result><br /></global-results></p><p><action name="loginform"<br />class="com.ywjava.action.LoginFormAction"><br /><result name="success">/login.jsp</result><br /></action></p><p><action name="login" class="com.ywjava.action.LoginAction"><br /><result name="success">/welcome.jsp</result><br /><result name="error">/login.jsp</result><br /><result name="input">/login.jsp</result><br /></action></p><p><action name="show" class="com.ywjava.action.ShowAction"><br /><result name="success">/show.jsp</result><br /><!-- 使用此攔截器 --><br /><interceptor-ref name="mydefault" /><br /></action></p><p></package><br /></struts>
當我們登陸後一分鐘不做任何操作重新整理後則會跳轉到登陸頁面