首页 > 代码库 > struts2 拦截器配置

struts2 拦截器配置

CheckLoginInterceptor.java---拦截器具体实现类: 

Java代码  技术分享
  1. package com.sunhoo.hcpms.struts2.action.interceptors;  
  2.   
  3. import java.util.Map;  
  4.   
  5. import javax.servlet.http.HttpServletRequest;  
  6.   
  7. import org.apache.struts2.ServletActionContext;  
  8.   
  9. import com.opensymphony.xwork2.ActionContext;  
  10. import com.opensymphony.xwork2.ActionInvocation;  
  11. import com.opensymphony.xwork2.interceptor.AbstractInterceptor;  
  12. import com.sunhoo.hcpms.struts2.action.LoginAction;  
  13.   
  14. /** 
  15.  * 拦截器 拦截没有登录的用户 
  16.  *  
  17.  * @author lyvee AbstractInterceptor 抽象类 
  18.  */  
  19. public class CheckLoginInterceptor extends AbstractInterceptor {  
  20.     public static ActionContext ctx;  
  21.     public static Map sessionMap = null;  
  22.     String task = "userLogin";  
  23.   
  24.     @Override  
  25.     public String intercept(ActionInvocation actionInvocation) throws Exception {  
  26.         ctx = actionInvocation.getInvocationContext();  
  27.         sessionMap = actionInvocation.getInvocationContext().getSession();  
  28.         HttpServletRequest request = (HttpServletRequest) ctx  
  29.                 .get(ServletActionContext.HTTP_REQUEST);  
  30.         String user_session_key = "currentUser";// 默认的key  
  31.         System.out.println("begin check login interceptor");  
  32.         // not to intercepted on loginAction  
  33.         Object action = actionInvocation.getAction();  
  34.         if (action instanceof LoginAction) {  
  35.             System.out.println("exit check login,because this is loginAction");  
  36.             actionInvocation.invoke();  
  37.             return null;  
  38.         } else {  
  39.             String returnStr = "logout";  
  40.               
  41.             if (null == request.getParameter("task") || "".equals(task)) {//如果task为空 则等于userLogin  
  42.                 task = "userLogin";  
  43.             }else {  
  44.                 task = request.getParameter("task");  
  45.             }if (task.equals("userLogin")) {// 根据不同的登录类型赋予user_session_key不同的value  
  46.                 user_session_key = "currentUser";  
  47.             } else if (task.equals("expertLogin")) {  
  48.                 user_session_key = "currentExpert";  
  49.                 returnStr="expertlogout";  
  50.             } else if (task.equals("adminLogin")) {  
  51.                 user_session_key = "currentAdmin";  
  52.                 returnStr="adminLogout";  
  53.             }  
  54.             // check session  
  55.             @SuppressWarnings("unused")  
  56.             Object okk = sessionMap.get(user_session_key);  
  57.             String userName = (String) sessionMap.get(user_session_key);  
  58.             // if userName already login  
  59.             if (userName != null) {  
  60.                 System.out.println("already login!");  
  61.                 actionInvocation.invoke();  
  62.             } else {// no login  
  63.                 System.out.println("no login.forward login page");  
  64.                 return returnStr;  
  65.             }  
  66.         }  
  67.         return null;  
  68.     }  
  69.   
  70. }  




struts.xml配置: 

Java代码  技术分享
  1. <package name="default" namespace="/" extends="struts-default">  
  2. <!-- 定义一个名为 checkLogin 的拦截器 -->  
  3. <interceptors>  
  4.     <!-- 定义权限检查拦截器 类级别-->  
  5.     <interceptor name="checkLogin"  
  6.         class="com.sunhoo.hcpms.struts2.action.interceptors.CheckLoginInterceptor" />  
  7.         <!-- 定义一个权限检查的拦截器 方法级别 -->  
  8.     <interceptor name="methodInterceptor" class="com.sunhoo.hcpms.struts2.action.interceptors.MethodInterceptor">  
  9.         <param name="excludeMethods"></param>  
  10.         <param name="includeMethods">expertTree</param>  
  11.     </interceptor>  
  12.     <!-- 定义一个包含权限检查的拦截器栈 -->  
  13.     <interceptor-stack name="myDefaultStack">  
  14.         <!-- 定义拦截器栈包含checkLogin拦截器 -->  
  15.         <interceptor-ref name="checkLogin"></interceptor-ref>  
  16.         <interceptor-ref name="defaultStack"></interceptor-ref>  
  17.         <interceptor-ref name="methodInterceptor"></interceptor-ref>  
  18.     </interceptor-stack>  
  19. </interceptors>  
  20. <!-- 设置全局 全局默认的拦截器栈-->  
  21. <default-interceptor-ref name="myDefaultStack"></default-interceptor-ref>  
  22.       
  23. <global-results>  
  24.     <result name="logout" type="dispatcher">/login.jsp</result>  
  25.     <result name="succ">/client/succ.jsp</result>  
  26.     <result name="fail">/client/fail.jsp</result>  
  27.     <result name="expertlogout" type="redirect">/expert/login.jsp?errorMsg=${errorMsg}</result>  
  28.     <result name="adminLogout" type="redirect"></result>  
  29. </global-results>  
  30. <action name="login_*" class="LoginAction" method="{1}">  
  31.     <result name="index" type="redirect">  
  32.         /question_questionList?task=userLogin  
  33.     </result>  
  34.     <result name="expertQuestions" type="redirect">  
  35.         /expert_queryQuestions?task=expertLogin  
  36.     </result>  
  37.     <result name="go" type="redirect">  
  38.         expertList.jsp  
  39.     </result>  
  40.     <interceptor-ref name="myDefaultStack" />  
  41. </action>  
  42. <action name="register_*" class="RegisterAction" method="{1}">  
  43.     <interceptor-ref name="methodInterceptor" />  
  44. </action>  
  45. <action name="expert_*" class="ExpertAction" method="{1}">  
  46.     <result name="index">  
  47.         /expert/questionList.jsp?task=expertLogin  
  48.     </result>  
  49.     <result name="expertView">/client/expertList.jsp?task=expertLogin</result>  
  50. </action>.............................  


        以上就是我的拦截器配置 
         我遇到的问题是  现在有三种不同类型的用户需要验证登录 1.专家 2.会员 3.专家。通过

Java代码  技术分享
  1. task = request.getParameter("task");  

来判断登录用户的类型 然后取得不同的session值来进行拦截。  我不知道这种方法行不行。不是说其他的行不行 因为我已经实现了 并且成功进行了三种不同类型的用户登录来拦截 反正就是我心里觉得这么做不对,不知道JE上有没有人做过类似的 请问你们怎么做的。 

struts2 拦截器配置