美文网首页
Struts2 拦截器之MethodFilterIntercep

Struts2 拦截器之MethodFilterIntercep

作者: wesker8080 | 来源:发表于2017-12-19 19:36 被阅读0次

    拦截器采用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>
    

    相关文章

      网友评论

          本文标题:Struts2 拦截器之MethodFilterIntercep

          本文链接:https://www.haomeiwen.com/subject/nariwxtx.html