Struts2拦截器使用

一.拦截器介绍:

     java里的拦截器是动态拦截Action调用的对象。它提供了一种机制可以使开发者可以定义在一个action执行的前后执行的代码,也可以在一个action执行前阻止其执行,同时也提供了一种可以提取action中可重用部分的方式。在AOP(Aspect-Oriented Programming)中拦截器用于在某个方法或字段被访问之前,进行拦截然后在之前或之后加入某些操作。

二.拦截原理:

     大部分时候,拦截器方法都是通过代理的方式来调用的。Struts 2的拦截器实现相对简单。当请求到达Struts 2的ServletDispatcher时,Struts 2会查找配置文件,并根据其配置实例化相对的拦截器对象,然后串成一个列表(list),最后一个一个地调用列表中的拦截器。Struts2拦截器是可插拔的,拦截器是AOP的一种实现。Struts2拦截器栈就是将拦截器按一定的顺序联结成一条链。在访问被拦截的方法或字段时,Struts2拦截器链中的拦截器就会按其之前定义的顺序被调用。

三:自定义拦截器实现:

1.自定义一个实现MethodFilterInterceptor接口(或者继承自AbstractInterceptor)的类。

import java.util.Map;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.MethodFilterInterceptor;
import com.wenhao.domain.User;

public class PrivilegeInterceptor extends MethodFilterInterceptor{

    @Override
    protected String doIntercept(ActionInvocation invocation) throws Exception {

        //获得session
        Map<String, Object> session = ActionContext.getContext().getSession();
        //获得登录标识
        User user = (User) session.get("user");
        //如果登录标识不为空放行,如果为空拦截
        if(user!=null) {
            //放行
            return invocation.invoke();
        }else {
            //拦截
            return "toLogin";
        }
    }
}

 2.在struts.xml中配置自定义过滤器:

<package name="crm" namespace="/" extends="struts-default">
    
        <!-- 配置自定义拦截器 -->
        <interceptors>
            <!-- 注册拦截器 -->
            <interceptor name="privilegeInterceptor" class="com.wenhao.web.privilegeinterceptor.PrivilegeInterceptor"></interceptor>
            <!-- 注册拦截器栈 -->
            <interceptor-stack name="myStack">
            
                <!-- 引入自定义拦截器 -->
                <interceptor-ref name="privilegeInterceptor">
                    <!-- 指定不拦截哪些方法 -->
                    <param name="excludeMethods">login,regist</param>
                </interceptor-ref>    
                <!-- 引入默认拦截器栈 -->
                <interceptor-ref name="defaultStack"></interceptor-ref>    
                        
            </interceptor-stack>
        </interceptors>
        
        <!-- 指定默认拦截器 -->
        <default-interceptor-ref name="myStack"></default-interceptor-ref>

</package>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值