码迷,mamicode.com
首页 > 编程语言 > 详细

SpringMVC拦截器

时间:2019-11-14 10:02:18      阅读:82      评论:0      收藏:0      [点我收藏+]

标签:boolean   自定义拦截器   div   gif   res   code   inter   ons   tor   

一、Spring MVC拦截器的使用

一、什么是拦截器

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

二、拦截器的执行流程图

 

 技术图片

 

 

2、执行具体流程:

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

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

(3)中央调度器调度HandlerMapping;

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

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

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

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

(8)Handler将执行后的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则是拦截,否则放行

 

SpringMVC拦截器

标签:boolean   自定义拦截器   div   gif   res   code   inter   ons   tor   

原文地址:https://www.cnblogs.com/F017/p/11854618.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!