自定义拦截器,查看请求路径,请求方法,操作路径,耗时等操作
@Component
public class ElapsedTimeInterceptor extends HandlerInterceptorAdapter {
private static final Logger log = LoggerFactory.getLogger(ElapsedTimeInterceptor.class);
//@Resource
//TokenManager tokenManager;
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
request.setAttribute(CommonConstants.METHOD_REQUEST_ELAPSED_TIME, System.currentTimeMillis());
return super.preHandle(request, response, handler);
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
long startMillis = (long) request.getAttribute(CommonConstants.METHOD_REQUEST_ELAPSED_TIME);
long endMillis = System.currentTimeMillis();
String requestURI = request.getRequestURI();
String method = request.getMethod();
String token = request.getHeader("token");
//String account = tokenManager.getUserName(token);
log.info("请求路径:【{}】, 请求方法:【{}】, 操作用户:【{}】, 耗时:【{}ms】", requestURI, method, "account", endMillis - startMillis);
super.afterCompletion(request, response, handler, ex);
}
}
/**
* 常量
*/
public class CommonConstants {
public static final String METHOD_REQUEST_ELAPSED_TIME = "method_request_elapsed_time";
public static final String HEADER_TOKEN = "token";
}
@Configuration
public class InterceptorConfig implements WebMvcConfigurer {
@Resource
private ElapsedTimeInterceptor elapsedTimeInterceptor;
/**
* 注册拦截器
*/
@Override
public void addInterceptors(InterceptorRegistry registry) {
/**
* 耗时日志拦截器
*/
registry.addInterceptor(elapsedTimeInterceptor)
.addPathPatterns("/**")
.excludePathPatterns(
"/swagger-ui.html/**",
"/webjars/**",
"/swagger-resources",
"/error"
);
}
}