import org.springframework.web.servlet.AsyncHandlerInterceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.ModelAndView;
public class MyAsyncInterceptor implements AsyncHandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
// 在处理器方法执行之前调用
// 例如权限检测,
// 参数加解密,
// 填充上下文-----填充上下文的数据,一定是要在afterCompletion方法中进行释放
System.out.println("Pre Handle method is Calling");
return true; // 继续处理请求
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
// 在处理器方法执行之后,视图渲染之前调用
System.out.println("Post Handle method is Calling");
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
// 在整个请求完成之后调用
System.out.println("Request and Response is completed");
}
@Override
public void afterConcurrentHandlingStarted(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
// 当异步请求开始时调用
System.out.println("Async request started");
}
}
拦截器编写完了,要注册一下拦截器才能使用
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new MyAsyncInterceptor());
}
}
// 当要增加拦截路径
@Configuration
public class WebConfig extends WebMvcConfigurerAdapter {
@Autowired
private LoginInterceptor loginInterceptor;
private static final String[] EXCLUDE_URL_ARRAY_URL_INTERCEPTOR = new String[]{"/doc.html", "/swagger-ui.html", "/swagger-resources/**",
"/v2/api-docs/**", "/webjars/**", "/ping**", "/api/cas/login", "/api/auth/captcha", "/api/prometheus"};
@Override
public void addInterceptors(InterceptorRegistry registry) {
InterceptorRegistration interceptorRegistrationLogin = registry.addInterceptor(this.loginInterceptor);
interceptorRegistrationLogin.addPathPatterns("/**").excludePathPatterns(EXCLUDE_URL_ARRAY_URL_INTERCEPTOR);
}
}