共计 1632 个字符,预计需要花费 5 分钟才能阅读完成。
SpringBoot 应用拦截器
拦截器有什么用
- 通过重写 preHand() 办法在申请发送到控制器之前执行操作。
- 通过重写 postHand() 办法在响应产生到客户端之前执行操作。
- 通过从新 afterCompletion() 办法在实现申请和响应之后执行操作。
怎么应用拦截器
定义拦截器
实现 HandlerInterceptor 接口并重写须要的办法,并通过 @Component 注解将拦截器注入到 Spring 容器中。
@Component
public class TestInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {System.out.println("preHandle");
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView){System.out.println("postHandle");
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {System.out.println("afterCompletion");
}
}
注册拦截器
实现 WebMvcConfigurer 接口,并通过 addInterceptors() 办法注册拦截器,同时能够通过 addPathPatterns()、excludePathPatterns() 办法指定拦截器拦挡的范畴。
@Component
public class TestInterceptorConfig implements WebMvcConfigurer {
@Autowired
TestInterceptor interceptor;
@Override
public void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(interceptor).addPathPatterns("/test1");
}
}
编写控制器测试
@RestController
public class TestController {@GetMapping("/test1")
public String test1() {System.out.println("Hello, world");
return "Hello, world.";
}
}
测试后果
preHandle
Hello, world
postHandle
afterCompletion
多个拦截器的调用程序
当增加多个拦截器时,拦截器调用的程序如下:
addInterceptor(AInterceptor);
addInterceptor(BInterceptor);
addInterceptor(CInterceptor);
调用后果如下:
preHandelerA
preHandelerB
preHandelerC
postHandlerC
postHandlerB
postHandlerA
afterCompletionC
afterCompletionB
afterCompletionA
拦截器的应用场景
- 记录接口响应相干信息:记录接口的拜访门路、参数和响应工夫等参数用于排查问题。
- 用户登录查看:判断用户是否登录,设置 session 等相干信息。
- 用户权限查看:应用注解和拦截器实现权限治理。
具体实现可参考🔗。
正文完
发表至: springboot
2022-07-29