• springBoot配置拦截器


    一、实现接口 org.springframework.web.servlet.HandlerInterceptor、或者继承其适配器类org.springframework.web.servlet.handler.HandlerInterceptorAdapter

    适配器类的好处是不用每个方法都去实现,而接口是必须实现

    1. public class OpenInterceptor extends HandlerInterceptorAdapter {
    2. @Override
    3. public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
    4. return true;
    5. }
    6. @Override
    7. public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable ModelAndView modelAndView) throws Exception {
    8. }
    9. @Override
    10. public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable Exception ex) throws Exception {
    11. }
    12. }

    二、添加springBoot配置类,添加拦截器配置使其生效

    配置类需要实现:org.springframework.web.servlet.config.annotation.WebMvcConfigurer

    1. @Configuration
    2. public class CustomWebMvcConfigurer implements WebMvcConfigurer {
    3. @Autowired
    4. private OpenInterceptor OpenInterceptor;
    5. // 添加拦截器
    6. @Override
    7. public void addInterceptors(InterceptorRegistry registry) {
    8. WebMvcConfigurer.super.addInterceptors(registry);
    9. // /v1/open下的接口都要走拦截器,除了/oauth开头的方法
    10. registry.addInterceptor(bgOpenInterceptor)
    11. .addPathPatterns("/v1/open/**")
    12. .excludePathPatterns("/v1/open/oauth/**");
    13. }
    14. }

    三、多个拦截器的执行规则

    1、根据当前请求,找到HandlerExecutionChain【可以处理请求的handler以及handler的所有 拦截器】
    2、先来顺序执行 所有拦截器的 preHandle方法
            ●  如果当前拦截器prehandler返回为true。则执行下一个拦截器的preHandle
            ● 如果当前拦截器返回为false。直接    倒序执行所有已经执行了的拦截器的 afterCompletion;
    3、如果任何一个拦截器返回false。直接跳出不执行目标方法
    4、所有拦截器都返回True。执行目标方法
    5、倒序执行所有拦截器的postHandle方法。
    6、前面的步骤有任何异常都会直接倒序触发 afterCompletion
    7、页面成功渲染完成以后,也会倒序触发 afterCompletion

     

    注:web模式下,springBoot增加自定义配置类,都是实现WebMvcConfigurer,具体可以添加哪种配置,就实现哪个方法即可

    1. public interface WebMvcConfigurer {
    2. default void configurePathMatch(PathMatchConfigurer configurer) {
    3. }
    4. default void configureContentNegotiation(ContentNegotiationConfigurer configurer) {
    5. }
    6. default void configureAsyncSupport(AsyncSupportConfigurer configurer) {
    7. }
    8. default void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
    9. }
    10. default void addFormatters(FormatterRegistry registry) {
    11. }
    12. default void addInterceptors(InterceptorRegistry registry) {
    13. }
    14. default void addResourceHandlers(ResourceHandlerRegistry registry) {
    15. }
    16. default void addCorsMappings(CorsRegistry registry) {
    17. }
    18. default void addViewControllers(ViewControllerRegistry registry) {
    19. }
    20. default void configureViewResolvers(ViewResolverRegistry registry) {
    21. }
    22. default void addArgumentResolvers(List resolvers) {
    23. }
    24. default void addReturnValueHandlers(List handlers) {
    25. }
    26. default void configureMessageConverters(List> converters) {
    27. }
    28. default void extendMessageConverters(List> converters) {
    29. }
    30. default void configureHandlerExceptionResolvers(List resolvers) {
    31. }
    32. default void extendHandlerExceptionResolvers(List resolvers) {
    33. }
    34. @Nullable
    35. default Validator getValidator() {
    36. return null;
    37. }
    38. @Nullable
    39. default MessageCodesResolver getMessageCodesResolver() {
    40. return null;
    41. }
    42. }

  • 相关阅读:
    Spring Boot Offset分页、Keyset 分页与Thymeleaf教程
    纯c#运行开源本地大模型Mixtral-8x7B
    案例分享 | 机场急救中心项目中BIM应用
    编程题练习@9-5
    基于ubuntu 20.04与cri-docker 搭建部署高可用k8s 1.25.3
    【分布式搜索引擎es】
    10_集成学习方法:随机森林、Boosting
    C++ Tutorials: C++ Language: Other language features: Preprocessor directives
    SpringCloud - Spring Cloud Alibaba 之 Seata分布式事务服务;AT事务模式(二十)
    [附源码]Python计算机毕业设计SSM留守儿童管理平台(程序+LW)
  • 原文地址:https://blog.csdn.net/qq_36042938/article/details/126466127