以spring boot为例,注意拦截器是单例 ,因此不要使用成员变量记录时间,而是通过setAttribute,getAttribute来传送时间。
@Configuration
public class BootWebAppConfigurer extends WebMvcConfigurerAdapter {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new BootInterceptor()).addPathPatterns("/**");
super.addInterceptors(registry);
}
}
/***
* 拦截器,单例
*/
public class BootInterceptor implements HandlerInterceptor {
public final AtomicLong _count = new AtomicLong();// 计数器
// 1
public boolean preHandle(HttpServletRequest req, HttpServletResponse resp, Object arg2) {
long begin_nao_time = System.nanoTime();
String realIp = HttpHeadTool.getRealIpAddr(req);
req.setAttribute("p_real_ip", realIp);
req.setAt