一. 点睛
拦截器(Interceptor
)实现对每一个请求处理前后进行相关的业务处理,类似于Servlet
的Filter
。
可让普通的Bean
实现HandlerInterceptor
接口或者继承HandlerInterceptorAdapter
类来实现自定义拦截器。
通过重写WebMvcConfigurerAdapter
的addInterceptors
方法来注册自定义的拦截器,下面演示一个简单的拦截器的开发和配置。业务含义为计算每一次请求的处理时间。
二. 示例
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
,查看控制台,运行结果如图所示:
三. 源代码示例:
打赏 欢迎关注人生设计师的微信公众账号
公众号ID:longjiazuoA
