• 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上有没有人做过类似的 请问你们怎么做的。 

  • 相关阅读:
    Mybatis 学习过程中出现空指针异常的错误【已解决】
    IntelliJ IDEA的常用设置及快捷键
    The server time zone value '�й���׼ʱ��' is unrecognized or represents more than one time zone错误的解决办法【已解决】
    IntelliJ IDEA安装教程及使用方法
    OA项目笔记
    Linux常用命令大全(四)
    Linux常用命令大全(三)
    Linux常用命令大全(二)
    Linux常用命令大全(一)
    Apache配置默认首页
  • 原文地址:https://www.cnblogs.com/Coda/p/4249405.html
Copyright © 2020-2023  润新知