您的位置:首页 > 编程语言 > Java开发

Struts2拦截器权限学习心得

2016-06-28 17:45 447 查看
总结在前面
1 每个action下面配置拦截器
2 定义全局默认拦截器,package下的所有action都会被拦截,不想被拦截的action就放到别的package下 
3 excludeMethode,includeMethode方式,感觉并不实用,拦截的是指定到的action的方法名,并不是action个的名字,如:             <actionname="login" class="com.action.loginAction">,不是login这个名称; 而是com.action.loginAction里的方法名
除了用3,excludeMethode,includeMethode方式要Java那边继承MethodFilterInterceptor之外,其他的都可以继承AbstracInterceptor
 
一 登录权限检查  
在需要的拦截的包中加入自定义拦截器栈
struts.xml
<?xml version="1.0"encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.1//EN""http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
<packagename="default" namespace="/"extends="struts-default">

<interceptors> 
            <!--定义一个名为authority的拦截器--> 

            <interceptor  class="com.interceptot.Interceptot"  name="authority"/>       

            <!--定义一个包含权限检查的拦截器栈-->
            <interceptor-stackname="mydefault">
              <!--配置自定义的拦截器--> 

                <interceptor-refname="authority">
                <param name="name">123</param>
                </interceptor-ref>
               <!--配置内建默认拦截器-->

                <interceptor-refname="defaultStack"/>     

            </interceptor-stack> 

</interceptors>         
        <global-results>
        <resultname="login">/Interceptot.jsp</result>
        </global-results>
       
        <actionname="login" class="com.action.loginAction">
               <resultname="SUCCESS">/success.jsp</result>
               <resultname="ERROR">/error.jsp</result>
        </action>
        <actionname="insert" class="com.action.one_addAction">
               <resultname="SUCCESS">/success.jsp</result>
               <resultname="ERROR">/error.jsp</result>
               <interceptor-refname="mydefault"></interceptor-ref>
        </action>
</package>
</struts>   

Interceptot.java
package com.interceptot;
 
import java.util.Map;
 
importcom.opensymphony.xwork2.Action;
importcom.opensymphony.xwork2.ActionContext;
importcom.opensymphony.xwork2.ActionInvocation;
importcom.opensymphony.xwork2.interceptor.MethodFilterInterceptor;
 
@SuppressWarnings("serial")
public class Interceptot extendsMethodFilterInterceptor {
        privateString name;
       
        publicString getName() {
               returnname;
        }
 
        publicvoid setName(String name) {
               this.name= name;
        }
 
        publicString doIntercept(ActionInvocation ai) throws Exception
        {
               ActionContextac=ai.getInvocationContext();
               Mapsession = ac.getSession();
               if(session.get("user")==null){
                       System.out.println("没有值 +++action名称:"+name);
                       returnAction.LOGIN;
               }
               else{
                       System.out.println("执行的action名称: "+name);
                       returnai.invoke();
               }
        }
}

二 配置全局默认拦截器
定义全局默认拦截器,package下的所有action都会被拦截,不想被拦截的action就放到别的package下 
Struts.xml
<?xml version="1.0"encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.1//EN""http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
<packagename="default" namespace="/"extends="struts-default">

<interceptors> 
            <!--定义一个名为authority的拦截器--> 

            <interceptor  class="com.interceptot.Interceptot"  name="authority"/>       

            <!--定义一个包含权限检查的拦截器栈-->
            <interceptor-stackname="mydefault">
              <!--配置自定义的拦截器--> 

                <interceptor-refname="authority">
                <paramname="name">123</param>
                </interceptor-ref>
               <!--配置内建默认拦截器-->

                <interceptor-refname="defaultStack"/>     

        
c0ce
    </interceptor-stack> 

</interceptors>      
  <!-- 定义使用全局默认拦截器,package下的所有action都会被拦截,不想被拦截的action就放到别的package下 -->
<default-interceptor-refname="mydefault"></default-interceptor-ref>
      
        <global-results>
        <resultname="login">/Interceptot.jsp</result>
        </global-results>
       
        <actionname="login" class="com.action.loginAction">
               <resultname="SUCCESS">/success.jsp</result>
               <resultname="ERROR">/error.jsp</result>
        </action>
        <actionname="insert" class="com.action.one_addAction">
               <resultname="SUCCESS">/success.jsp</result>
               <resultname="ERROR">/error.jsp</result>
        </action>
</package>
</struts>   

3 excludeMethode,includeMethode方式,感觉并不实用,拦截的是方法名,并不是action个的名字,如:<actionname="login" class="com.action.loginAction">,不是login这个名称
<?xml version="1.0"encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.1//EN""http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
<packagename="default" namespace="/"extends="struts-default">

<interceptors> 
            <!--定义一个名为authority的拦截器--> 

            <interceptor  class="com.interceptot.Interceptot"  name="authority"/>       

            <!--定义一个包含权限检查的拦截器栈-->
            <interceptor-stackname="mydefault">
              <!--配置自定义的拦截器--> 

                <interceptor-refname="authority">
                <!-- execute,haha方法不会拦截,是被调用action的方法名称,并不是<actionname="login"的这login -->
                <paramname="excludeMethode">execute,haha</param>
                <paramname="name">123</param>
                </interceptor-ref>
               <!--配置内建默认拦截器-->

                <interceptor-refname="defaultStack"/>     

            </interceptor-stack> 

</interceptors>      
  <!-- 定义使用全局默认拦截器,package下的所有action都会被拦截,不想被拦截的action就放到别的package下 -->
<default-interceptor-refname="mydefault"></default-interceptor-ref>
      
        <global-results>
        <resultname="login">/Interceptot.jsp</result>
        </global-results>
       
        <actionname="login" class="com.action.loginAction">
               <resultname="SUCCESS">/success.jsp</result>
               <resultname="ERROR">/error.jsp</result>
        </action>
        <actionname="insert" class="com.action.one_addAction">
               <resultname="SUCCESS">/success.jsp</result>
               <resultname="ERROR">/error.jsp</result>
        </action>
 
</package>
</struts>   
 
 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: