• SpringMVC拦截器


    一、Spring MVC拦截器的使用

    一、什么是拦截器

    Spring MVC中的拦截器(Interceptor)类似于Servlet中的过滤器(Filter),它主要用于拦截用户请求并作相应的处理。例如通过拦截器可以进行权限验证、记录请求信息的日志、判断用户是否登录等SpringMVC中通过实现HandlerInterceptor接口实现自定义拦截器类。

    二、拦截器的执行流程图

    2、执行具体流程:

    1)当客户端方法请求过来后,先调度Filter过滤器;

    2)过滤器之后执行中央调度器;

    3)中央调度器调度HandlerMapping

    4HandlerMapping返回处理器执行链交给处理器适配器;

    5)中央调度器将处理器执行链交给处理器适配器;

    6)中央调度器将先执行拦截器中的preHandle方法,进行请求拦截,如果返回true则继续执行,返回false则请求结束;

    7)当拦截器返回true时,处理器适配器调度Handler执行;

    8Handler将执行后的ModelAndView交给中央调度器;

    9)中央调度器执行拦截其中的postHandler方法;

    10)拦截器postHandle方法执行完毕后,由中央调度器将ModelAndView交给视图解析器ViewResolver;

    11)视图解析器返还视图View给中央调度器;

    12)中央调度器调度试图渲染;

    13)视图渲染完毕之后执行拦截器中的after方法;

    14)拦截器到此全部完毕,由中央调度器响应视图给客户端。

    三、示例

    1.定义jsp

    <html>
    <body>
    <h2>Hello World!</h2>
    </body>
    </html>

    2.定义interceptor类

    继承HandlerInterceptor

    复制代码
    public class Myinterceptor implements HandlerInterceptor {
        @Override
        public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
            System.out.println("/****************拦截器当中preHandle的执行方法****************/");
            return true;
        }
    
        @Override
        public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
            System.out.println("在HandlerAdapter之后执行,在DispatcherServlet解析视图之前执行");
        }
    
        @Override
        public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
            System.out.println("===========呈现之后调用===========");
        }
    }
    复制代码

    详情如上重写方法实现拦截

    3.在Spring-MVC中配置拦截器

    复制代码
    <!--配置拦截器-->
    <mvc:interceptors>
        <mvc:interceptor>
            <mvc:mapping path="/my/**"/>
            <bean class="com.SpringMVC.interceptor.Myinterceptor"/>
        </mvc:interceptor>
    </mvc:interceptors>
    复制代码

    4.配置控制器 

    复制代码
    @Controller
    @RequestMapping("/my")
    public class MyController {
        @RequestMapping("/first")
        public String fileer(){
            System.out.println("/***********控制器的方法***********/");
            return "index";
        }
    }
    复制代码

    效果如下所示:

    跳转到首页

    如将preHandle  return 改为false则是拦截,否则放行

  • 相关阅读:
    window安装php的mongodb扩展
    Android NDK开发步骤(r9)
    osgViewer销毁bug
    C/C++ typedef用法
    Java并发编程:Lock
    java中构造器(Constructor)
    进程和线程关系及区别
    Java总结篇系列:Java泛型
    在powerdesigner中创建物理数据模型
    非常好的理解遗传算法的例子
  • 原文地址:https://www.cnblogs.com/tinghao/p/11848758.html
Copyright © 2020-2023  润新知