SpringMvc4.x基本配置(二):拦截器配置

431 阅读1分钟
原文链接: blog.longjiazuo.com

一. 点睛

拦截器(Interceptor)实现对每一个请求处理前后进行相关的业务处理,类似于ServletFilter

可让普通的Bean实现HandlerInterceptor接口或者继承HandlerInterceptorAdapter类来实现自定义拦截器。

通过重写WebMvcConfigurerAdapteraddInterceptors方法来注册自定义的拦截器,下面演示一个简单的拦截器的开发和配置。业务含义为计算每一次请求的处理时间。

二. 示例

1. 示例拦截器

package org.light4j.springMvc4.interceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;

public class DemoInterceptor extends HandlerInterceptorAdapter {//①

    @Override
    public boolean preHandle(HttpServletRequest request, //②
            HttpServletResponse response, Object handler) throws Exception {
        long startTime = System.currentTimeMillis();
        request.setAttribute("startTime", startTime);
        return true;
    }

    @Override
    public void postHandle(HttpServletRequest request, //③
            HttpServletResponse response, Object handler,
            ModelAndView modelAndView) throws Exception {
        long startTime = (Long) request.getAttribute("startTime");
        request.removeAttribute("startTime");
        long endTime = System.currentTimeMillis();
        System.out.println("本次请求处理时间为:" + new Long(endTime - startTime)+"ms");
        request.setAttribute("handlingTime", endTime - startTime);
    }
}

代码解释:

① 继承HandlerInterceptorAdapter类来实现自定义拦截器。
② 重写preHandle方法,在请求发生前执行。
③ 重写postHandle方法,在请求完成后执行。

2.配置

在配置类MyMvcConfig增加下面的配置:

@Bean// ①
public DemoInterceptor demoInterceptor() {
        return new DemoInterceptor();
    }

@Override
public void addInterceptors(InterceptorRegistry registry) {// ②
        registry.addInterceptor(demoInterceptor());
    }

代码解释:

① 配置拦截器的Bean
② 重写addInterceptors方法,注册拦截器。

3. 运行

在浏览器访问任何路径,如http://localhost/springMvc4.x-interceptors/anno/name1,查看控制台,运行结果如图所示:
interceptor

三. 源代码示例:

github地址:点击查看
码云地址:点击查看

打赏 欢迎关注人生设计师的微信公众账号
公众号ID:longjiazuoA