需要对某个功能模块进行暂时的屏蔽。但是使用自定义注解和@AspectJ进行控制比较麻烦。使用拦截器对整个控制器中的所有方法进行拦截屏蔽。
1、创建WebInterceptor类,用来处理具体的逻辑
public class WebInterceptor implements WebRequestInterceptor {
private static final Logger LOGGER = LoggerFactory.getLogger(WebInterceptor.class);
@Override
public void preHandle(WebRequest request) throws Exception {
HttpServletRequest servletRequest = ((ServletWebRequest) request).getRequest();
String method = servletRequest.getMethod().toUpperCase();
LOGGER.info("{} [{}],token[{}]",method,servletRequest.getRequestURI(),request.getHeader("token"));
}
@Override
public void postHandle(WebRequest request, ModelMap model) throws Exception {
}
@Override
public void afterCompletion(WebRequest request, Exception ex) throws Exception {
}
WebInterceptor类需要继承WebRequestInterceptor类,并且实现三个方法。分别是preHandle
、postHandle
、afterCompletion
。顾名思义就是方法执行前,方法执行后,和视图渲染之后。
2、创建WebMvcConfig类
@Configuration
public class WebMvcConfig extends WebMvcConfigurerAdapter {
@Autowired
private AiExpInterceptor aiExpInterceptor;
@Autowired
private VirExpInterceptor expInterceptor;
@Override
public void addInterceptors(InterceptorRegistry registry) {
super.addInterceptors(registry);
registry.addWebRequestInterceptor(new WebInterceptor());
}
// registry.addWebRequestInterceptor(aiExpInterceptor).addPathPatterns("/api/AiExpQuestion/**","/api/UserAiexpRelation/**"); // 需要具体某个路径的话,就在后面接着add
}