Spring Boot 攔截器建立和註冊
一、攔截器
```
public class MyInterceptorimplements HandlerInterceptor {
private Loggerlogger = LoggerFactory.getLogger ( MyInterceptor.class );
private NamedThreadLocalstartTimeThreadLocal =new NamedThreadLocal("StopWatch-StartTime");
@Override
public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o)throws Exception {
//對option請求的處理
httpServletResponse.setHeader("Access-Control-Allow-Origin", "*");
httpServletResponse.setHeader("Access-Control-Allow-Methods", "*");
httpServletResponse.setHeader("Access-Control-Max-Age", "3600");
httpServletResponse.setHeader("Access-Control-Allow-Headers",
"Origin, X-Requested-With, Content-Type, Accept");
// 列印請求日誌
//開始時間
long beginTime = System.currentTimeMillis();
startTimeThreadLocal.set(beginTime);
logger.info ("URL : " + httpServletRequest.getRequestURL ().toString () );
logger.info ("請求方式 : " + httpServletRequest.getMethod () );
logger.info ("IP : " + httpServletRequest.getRemoteAddr () );
// HandlerMethod handlerMethod = (HandlerMethod)o;
// logger.info ( "請求的介面方法 : " + handlerMethod.getMethod());
// Enumeration enumAttr = httpServletRequest.getParameterNames ();
// StringBuilder sb = new StringBuilder ();
// while (enumAttr.hasMoreElements ()) {
// String attr = enumAttr.nextElement ().toString ();
// sb.append (attr+":"+ httpServletRequest.getParameter ( attr ) ).append ( ", " );
// }
// logger.info("請求引數:{}",sb);
// logger.info ( "Cookies: " + httpServletRequest.getCookies ());
//引數
Enumeration enums = httpServletRequest.getParameterNames ();
while (enums.hasMoreElements ()) {
String paraName = enums.nextElement ();
logger.info ( paraName +":" + httpServletRequest.getParameter ( paraName ) );
}
return true;
}
@Override
public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView)throws Exception {
}
@Override
public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e)throws Exception {
long endTime = System.currentTimeMillis();
long beginTime =startTimeThreadLocal.get();
long consumeTime = endTime - beginTime;
logger.info("請求時間:{}ms",consumeTime);
}
```
二、註冊
```
@Configuration
public class MyControllerAdviceextends WebMvcConfigurerAdapter {
@Bean //攔截器注入為bean
public HandlerInterceptorgetMyInterceptor(){
return new MyInterceptor();
}
@Bean //攔截器注入為bean
public HandlerInterceptorgetOperateLogInterceptor(){
return new OperateLogInterceptor();
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
//註冊攔截器1
registry.addInterceptor(getMyInterceptor()).addPathPatterns("/**");
//註冊攔截器2
registry.addInterceptor(getOperateLogInterceptor()).addPathPatterns("/**");
super.addInterceptors(registry);
}
}
```