In SpringBoot version 2.1.6 unable to intercept access actuator request Now I have a global interceptor
@Componentpublic class ServiceFilter implements HandlerInterceptor {//log4jstatic final Logger logger = LogManager.getLogger(ServiceFilter.class);private final RateLimiter limiter = RateLimiter.create(Runtime.getRuntime().availableProcessors() * 2 + 1);private final ThreadLocal<ExecuteRecordDto> executeRecord = new ThreadLocal<>();public ServiceFilter() {}@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { ExecuteRecordDto recordDto = ExecuteRecordDto.bulider(request); executeRecord.set(recordDto); if (!limiter.tryAcquire()) { logger.warn("rate limiter ; json logger : {}",CommonUtil.toJSONString(recordDto)); response.getWriter().print(CommonUtil.toJSONString(ResultStatus.status(407, "rate limiter"))); return false; } if (ObjectUtils.isEmpty(request.getHeader("Authorization"))) { logger.warn("illegal request, json logger : {} ",CommonUtil.toJSONString(recordDto)); response.getWriter().print(CommonUtil.toJSONString(ResultStatus.status(403, "Permission denied"))); return false; } switch (TokenHandle.checkToken(request.getHeader("Authorization"))) { //正常放行token case 0: response.getWriter().print(CommonUtil.toJSONString(ResultStatus.status(407, "rate limiter"))); return true; //token 过期 case 1: response.getWriter().println(CommonUtil.toJSONString(ResultStatus.status(408, "Token expire"))); break; //非法token case 2: logger.warn("illegal token, json logger : {} ",CommonUtil.toJSONString(recordDto)); response.getWriter().print(CommonUtil.toJSONString(ResultStatus.status(409, "Illegal token "))); break; default: throw new RuntimeException("server runtime exception"); } return true;}@Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { ExecuteRecordDto recordDto = executeRecord.get(); logger.info("json logger : {}",CommonUtil.toJSONString(recordDto)); executeRecord.remove();}
}
And make it work
@Configurationpublic class ConfigFilter implements WebMvcConfigurer {private final ServiceFilter filter;@Autowiredpublic ConfigFilter(ServiceFilter filter){ this.filter = filter;}@Overridepublic void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(filter).addPathPatterns("/**");}}
I requested my own api, get the effect I want
How can SpringBoot intercept a visit to actuator