1. 编写自定义拦截器
- 编写自定义拦截器
- 实现HandlerInterceptor接口
- 重写接口方法preHandle、postHandle、afterCompletion
如:
publicclassCustomInterceptorimplementsHandlerInterceptor{privatestaticfinal ObjectMapper mapper=newObjectMapper();publicCustomInterceptor(){
System.out.println("init CustomInterceptor....");}@OverridepublicbooleanpreHandle(HttpServletRequest request, HttpServletResponse response, Object handler)throws Exception{// get token
String token= request.getHeader("token");if(!StringUtils.hasLength(token)){
token= request.getParameter("token");}if(!StringUtils.hasLength(token)){renderResponse(response,"token not input");}// verify token
User user= Cache.userCache.get(token);if(user!= null){//token is okreturntrue;}else{//token verify failure//write response//write responserenderResponse(response,"token verify failure");returnfalse;}}@OverridepublicvoidpostHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView)throws Exception{
System.out.println("CustomInterceptor postHandle");}@OverridepublicvoidafterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)throws Exception{
System.out.println("CustomInterceptor afterCompletion");}privatevoidrenderResponse(HttpServletResponse response, String json){
response.setCharacterEncoding("utf8");
response.setContentType("application/json");try(PrintWriter writer= response.getWriter()){
writer.write(mapper.writeValueAsString(JsonData.buildError(json)));}catch(IOException e){
e.printStackTrace();}}}
2. 注册拦截器
- 自定义配置类
- 配置类实现WebMvcConfigurer接口
- 重写接口方法addInterceptors
- 在addInterceptors方法中注册自定义拦截器
- 在配置类上加@Configuration注解
如:
@ConfigurationpublicclassCustomWebMvcConfigurerimplementsWebMvcConfigurer{@OverridepublicvoidaddInterceptors(InterceptorRegistry registry){//拦截器最后路径一定要 /** 如果是目录的话则是 /*/
registry.addInterceptor(getCustomInterceptor()).addPathPatterns("/api/v1/pri/**");//register
WebMvcConfigurer.super.addInterceptors(registry);}/**
* put CustomInterceptor into ioc
* @return
*/@Beanpublic CustomInterceptorgetCustomInterceptor(){returnnewCustomInterceptor();}}