struts2拦截器的配置和使用

 第一步,新建一个拦截器类LoginInterceptor继承自AbstractInterceptor

代码:

  
  
  
  
  1. package com.zakc.yhpc.common; 
  2.  
  3. import java.util.Map; 
  4.  
  5. import com.opensymphony.xwork2.ActionInvocation; 
  6. import com.opensymphony.xwork2.interceptor.AbstractInterceptor; 
  7. import com.zakc.yhpc.action.LoginAction; 
  8.  
  9. public class LoginInterceptor extends AbstractInterceptor { 
  10.     public static final String LOGIN_KEY = "userMap"
  11.     public static final String ERROR = "error"
  12.   
  13.     public String intercept(ActionInvocation actionInvocation) throws Exception { 
  14.   
  15.         // 对LoginAction不做该项拦截 
  16.         Object action = actionInvocation.getAction(); 
  17.         if (action instanceof LoginAction) { 
  18.             System.out.println("对LoginAction不做该项拦截"); 
  19.             return actionInvocation.invoke(); 
  20.         } 
  21.   
  22.         // 确认Session中是否存在 
  23.         Map session = actionInvocation.getInvocationContext().getSession(); 
  24.          
  25.         if (session.get(LOGIN_KEY) != null) { 
  26.             //存在时继续进行后面的操作 
  27.             return actionInvocation.invoke(); 
  28.         } else { 
  29.             //否则终止后续操作,返回error 
  30.             System.out.println("没有登录!"); 
  31.             return ERROR; 
  32.         } 
  33.     } 

此拦截器类具有两种功能:一是当用户未登录时直接访问后台action,强制跳转到登录页。二是当一定时间不操作页面,即session过期,用户再次操作时也会跳到登录页。

(补充一点小知识,设置session的周期时间:

  
  
  
  
  1. request.getSession().setAttribute("userMap", userMap);//将用户信息存入session            
  2. request.getSession().setMaxInactiveInterval(60*30);//设置session的过期时间为半小时 

 

判断session是否过期:

  
  
  
  
  1. if(request.getSession(false)==null){ 
  2.   //session过期 
  3.   System.out.print("session过期"); 

 

第二步,配置struts.xml拦截器,并在<package>标签中引人拦截器,此时package中的所有的action执行前都会先执行拦截器类 LoginInterceptor 

 

  
  
  
  
  1. <package name="strutsOther2" namespace="/safecheck" extends="struts-default"> 
  2.         <!-- 自定义拦截器 start--> 
  3.         <interceptors> 
  4.             <interceptor name="login" class="com.zakc.yhpc.common.LoginInterceptor"/> 
  5.             <interceptor-stack name="myStack"> 
  6.                 <interceptor-ref name="login"/> 
  7.                 <interceptor-ref name="defaultStack"/> <!-- 默认拦截器必须引用-->
  8.             </interceptor-stack> 
  9.         </interceptors> 
  10.         <default-interceptor-ref name="myStack"/> 
  11. <!-- 设置全局错误结果,此package中的所有的action或拦截器类LoginInterseptor中的返回结果为error时,跳转的页面-->
  12.         <global-results><result name="error">../error.jsp</result></global-results> 
  13.         <!-- 自定义拦截器 end--> 
  14.          
  15.          <!-- 安全检查 --> 
  16.         <action name="findCheckSheetList" class = "safeCheckAction" method="findCheckSheetList"> 
  17.             <result name="success" >findCheckSheetList.jsp</result> 
  18.         </action> 
  19.         <action name="findCheckItemList" class = "safeCheckAction" method="findCheckItemList"> 
  20.             <result name="success" >findCheckItemList.jsp</result> 
  21.         </action> 
  22.         <action name="toCheck" class = "safeCheckAction" method="toCheck"> 
  23.             <result name="success" >toCheck.jsp</result> 
  24.         </action> 
  25. </package> 

到此拦截器配置完毕

你可能感兴趣的:(struts2拦截器,session过期)