美文网首页SSM
SpringMVC 拦截器

SpringMVC 拦截器

作者: 落云和枫 | 来源:发表于2018-11-29 21:45 被阅读0次

    一 自定义拦截器

        1. 跟过滤器比较像的技术

        2.发送请求时被拦截器拦截,在控制器前后添加额外功能

            2.1 跟AOP 区分开,AOP 在特定方法前后扩充(对ServiceImpl)

            2.2 拦截器,请求拦截,针对点是控制器方法(对Controller)

        3. SpringMVC 拦截器 和 Filter的区别

            3.1 拦截器只能拦截Controller

            3.2 Filter可以拦截任何请求

        4. 实现自定义拦截器的步骤

            4.1 新建类实现 HandlerInterceptor 接口

    package com.chen.interceptor;

    import javax.servlet.http.HttpServletRequest;

    import javax.servlet.http.HttpServletResponse;

    import org.springframework.web.servlet.HandlerInterceptor;

    import org.springframework.web.servlet.ModelAndView;

    public class DemoInterceptor implements HandlerInterceptor{

        //在进入控制器之前执行

        //如果返回值为false,阻止进入控制器

        //控制代码

        @Override

        public boolean preHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2) throws Exception {

            System.out.println("arg2:"+arg2);

            System.out.println("preHandle");

            return true;

        }

        //控制器执行完成,进入jsp之前执行.

        //日志记录

        //敏感词语过滤

        @Override

        public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3)

        throws Exception {

            System.out.println("往"+arg3.getViewName()+"跳转");

            System.out.println("model的值"+arg3.getModel().get("model"));

            String word = arg3.getModel().get("model").toString();

            String newWord = word.replace("祖国", "**");

            arg3.getModel().put("model",newWord);

            System.out.println("postHandle");

        }

        //jsp执行完成后执行

        //记录执行过程中出现的异常

        //可以把异常几率到日志中

        @Override

        public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3)

        throws Exception {

        System.out.println("agr3:"+arg3);

        System.out.println("afterCompletion"+arg3.getMessage());

        }

    }

            4.2 在 SpringMVC.xml配置拦截器需要拦截哪些控制器

            4.2.1 拦截所有控制器

     <!-- 拦截器 -->

    <mvc:interceptors>

        <mvc:interceptor>

            <bean class="com.chen.controller.DemoController"></bean>

        </mvc:interceptor>

    </mvc:interceptors>

            4.2.2 拦截特定的 url

        <!-- 拦截器 -->

        <mvc:interceptors>

            <mvc:interceptor>

                <mvc:mapping path="/demo"/>

                <mvc:mapping path="/demo1"/>

                <mvc:mapping path="/demo2"/>

                <bean class="com.chen.controller.DemoController"></bean>

        </mvc:interceptor>

        </mvc:interceptors>


    二 拦截器栈

       1. 多个拦截器同时生效时,组成拦截器栈

        2.顺序 先进后厨

        3 执行顺序和在springmvc.xml 中配置顺序有关

        preHandle(A) -> preHandle(B) -> 控制器方法 -> postHandle(B) ->postHanle(A) -> jsp -> afterCompletion(B)-> afterCompletion(A)

    三 使用springmvc 拦截器实现登陆验证

        1 把页面放到 web-inf中

        2 放入到web-inf中后必须通过控制器转发到页面,springMVC 拦截器拦截的是控制器,不拦截jsp

        2. 通过拦截器栈拦截全部控制器,需要在拦截器内部方形login控制器

    controller

    public boolean preHandle(HttpServletRequest req, HttpServletResponse res, Object arg2) throws Exception {

        String uri = req.getRequestURI();

        if(uri.equals("/springmvc03/login")){

            return true;

        }else{

        Object obj = req.getSession().getAttribute("users");

        if(obj!=null){

            eturn true;

        }

        res.sendRedirect("/springmvc03/login.jsp");

            return false;

        }

    }

            

    <!-- 配置拦截器 -->

    <mvc:interceptors>

    <bean class="com.chen.interceptor.LoginInterceptor"></bean>

    </mvc:interceptors>

    相关文章

      网友评论

        本文标题:SpringMVC 拦截器

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