##springMVC拦截器

一、概念

   拦截器(Interceptor)是springMVC框架中提供一种类似于过滤器功能的组件,主要作用是拦截用户的请求,是spring AOP的体现,应用场景主要有用户登录、权限验证、或者记录请求日志等在请求到达contrroller之前对请求进行处理的方式。springMVC中的拦截器是可插拔式设计,如果需要拦截器只需要在配置文件中配置该拦截器。不需要则去掉拦截器的配置,对springMVC框架不会有任何影响。在springMVC中拦截器是链接调用,即所有拦截器会组成一条拦截器链,请求会按照顺序依次经过每一个拦截器

二、拦截器的使用

(1) 实现HandlerInterceptor接口
public class LoggerPrintHandlerInterceptor1 implements HandlerInterceptor{

private static Logger logger = LoggerFactory.getLogger(LogPrintHandlerInterceptor.class);

/**
 *  请求进入拦截器,进入一个拦截器最先执行该方法,该方法返回一个boolean值,当值为true,拦截器对请求放行,
 *  请求进入下一个拦截器或者controller中值为false时,则表示该请求结束,不会再向下执行,因此可以在该方法
 *  中对请求做预处理操作
 *  参数:request 请求
 *        response  响应
 *        handler 该请求访问的资源路径
 */
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
    logger.info("拦截方法: [" + handler.toString() + "]");
    return true;
}

/**
 * postHandle方法执行的前提是preHandle方法的返回值为true,该方法的执行时间介于
 * 在controller层方法执行完成后,DispatcherServlet进行视图渲染之前,可以获取到
 * modelAndView对象,因此可以对modelAndView对象进行操作
 */
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
    logger.info("方法: [" + handler.toString() + "] 执行完成");
}

/**
 * afterCompletion在整个请求完成之后执行,主要作用是进行资源清理,前提也是preHandle方法的返回值为true
 */
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
    logger.info("请求执行完成");
}}   
(2) 继承HandlerInterceptorAdapter类
public class LoggerPrintHandlerInterceptor2 extends HandlerInterceptorAdapter{

public LoggerPrintHandlerInterceptor2() {
    super();
}

@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
    return super.preHandle(request, response, handler);
}

@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
    super.postHandle(request, response, handler, modelAndView);
}

@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
    super.afterCompletion(request, response, handler, ex);
}

/**
 * HandlerInterceptorAdapter类实现了AsyncHandlerInterceptor接口,与HandlerInterceptor接口不同的是增加一个afterConcurrentHandlingStarted方法,
 * 该做方法与postHandler方法作用相似,但是不同的是postHandler是在controller方法完成后执行,afterConcurrentHandlingStarted是在controller方法执行的同时执行
 */
@Override
public void afterConcurrentHandlingStarted(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
    super.afterConcurrentHandlingStarted(request, response, handler);
}}
三、拦截器配置
XML配置:
<mvc:interceptors>
    <bean class="com.fan.moxiangbooks.config.interceptor.LoggerPrintHandlerInterceptor2"/>
   <mvc:interceptor>
    <mvc:mapping path="/**"/>
    <mvc:exclude-mapping path="/web/**"/>
    <bean class="com.fan.moxiangbooks.config.interceptor.LoggerPrintHandlerInterceptor1"/>
</mvc:interceptor></mvc:interceptors>
配置类配置:
@Configuration
@EnableWebMvc
public class WebConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
 registry.addInterceptor(new oggerPrintHandlerInterceptor1()).addPathPatterns("/**").excludePathPatterns("/web/**");
 registry.addInterceptor(new LoggerPrintHandlerInterceptor2()).addPathPatterns("/admin/**");
}}                              
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 本文作者:钟昕灵,叩丁狼高级讲师。原创文章,转载请注明出处。 前言 Spring MVC属于SpringFrame...
    叩丁狼教育阅读 3,320评论 1 4
  • 一、定义Interceptor实现类 SpringMVC 中的Interceptor 拦截请求是通过Handler...
    bboymonk阅读 384评论 0 0
  • 一 自定义拦截器 1. 跟过滤器比较像的技术 2.发送请求时被拦截器拦截,在控制器前后添加额外功能 ...
    落云和枫阅读 417评论 0 0
  • SpringMVC中使用Interceptor拦截器 有两种常用的方法实现SpringMVC拦截器: 1.一种是实...
    ll0292阅读 1,008评论 0 4
  • 说明: Spring MVC 的处理器拦截器类似于 Servlet 开发中的过滤器 Filter,用于对处理器进行...
    青春代言人阅读 1,485评论 0 0