Struts2 拦截器之MethodFilterIntercep

2017-12-19  本文已影响0人  wesker8080

拦截器采用MethodFilterInterceptor好处就是比较灵活,见文思义就是可以根据方法来判断拦截

使用方法:

1.编写一个类继承MethodFilterInterceptor

import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.MethodFilterInterceptor;
import com.wtwd.bos.pojo.User;

public class LoginInterceptor extends MethodFilterInterceptor {
    
    /**
     * 登陆拦截器
     */
    @Override
    protected String doIntercept(ActionInvocation invocation) throws Exception {
        if(!login) {
            return "login";//需要拦截转到登陆页面
        }else {
            return invocation.invoke();//放行
        }
    }

}

2.在Struts.xml里配置拦截器

<interceptors>
            <!-- 注册自定义拦截器 -->
            <interceptor name="loginInterceptor" class="com.xx.xx.BOSLoginInterceptor">
                <!-- 指定哪些方法不需要拦截 -->
                <param name="excludeMethods">login</param>
            </interceptor>
            <!-- 定义拦截器栈,因为Struts2拦截器只拦截默认栈所以要定义拦截器栈-->
            <interceptor-stack name="myStack">
                <interceptor-ref name="loginInterceptor"></interceptor-ref>
                <interceptor-ref name="defaultStack"></interceptor-ref>
            </interceptor-stack>
        </interceptors>
        <default-interceptor-ref name="myStack"/>

注:举例一个用户登陆应用场景,通常我们会有拦截用户是否登陆这个逻辑,如果拦截到未登陆的话需要跳转到登陆页面。但是像上面那样直接返回"login"的话,Struts2会找不到跳转页面,所以需要配置下全局结果集
3.在Struts.xml里配置全局结果集定义

        <!-- 全局结果集定义 -->
        <global-results>
            <result name="login">/login.jsp</result>
        </global-results>
上一篇下一篇

猜你喜欢

热点阅读