风在路上 风在路上
首页
导航站
  • Java-Se

    • Java基础
  • Java-Se进阶-多线程

    • 多线程
  • Java-Se进阶-java8新特性

    • java8新特性
  • Java-ee

    • JavaWeb
  • Java虚拟机

    • JVM
  • golang基础

    • golang基础
  • golang框架

    • gin
  • SQL 数据库

    • MySQL
  • NoSQL 数据库

    • Redis
    • ElasticSearch
    • MongoDB
  • ORM

    • MyBatis
    • MyBatis-Plus
  • Spring

    • Spring
  • SpringMVC

    • SpringMVC1
    • SpringMVC2
  • SpringCloud

    • SpringCloud
  • 中间件

    • RabbitMQ
    • Dubbo
  • 秒杀项目
  • Git
  • Linux
  • Docker
  • JWT
  • 面试
  • 刷题
开发问题😈
设计模式
关于💕
归档🕛
GitHub (opens new window)

风

摸鱼
首页
导航站
  • Java-Se

    • Java基础
  • Java-Se进阶-多线程

    • 多线程
  • Java-Se进阶-java8新特性

    • java8新特性
  • Java-ee

    • JavaWeb
  • Java虚拟机

    • JVM
  • golang基础

    • golang基础
  • golang框架

    • gin
  • SQL 数据库

    • MySQL
  • NoSQL 数据库

    • Redis
    • ElasticSearch
    • MongoDB
  • ORM

    • MyBatis
    • MyBatis-Plus
  • Spring

    • Spring
  • SpringMVC

    • SpringMVC1
    • SpringMVC2
  • SpringCloud

    • SpringCloud
  • 中间件

    • RabbitMQ
    • Dubbo
  • 秒杀项目
  • Git
  • Linux
  • Docker
  • JWT
  • 面试
  • 刷题
开发问题😈
设计模式
关于💕
归档🕛
GitHub (opens new window)
  • 问题
  • SpringBoot相关
    • java基础相关
    • log4j日志配置
    • SpringBoot封装starter并上传到maven仓库
    • SpringBoot整合Validation
    • 开发问题
    zdk
    2022-01-06
    目录

    SpringBoot相关

    Table of Contents generated with DocToc (opens new window)

    • springboot项目中在拦截器里使用redis获取值,一直爆空指针错误:
    • springboot整合mybatis-plus时,同时导入mybatis-generator包,会出现冲突,导致serviceBean扫描不到
    • Spring Boot 使用WebMvcConfigurer配置拦截器导致跨域配置失效问题

    # springboot项目中在拦截器里使用redis获取值,一直爆空指针错误:

    注意

    拦截器在SpringContext初始化之前就执行了,Bean初始化之前它就执行了,所以它肯定是无法获取SpringIOC容器中的内容的。那么我们就让拦截器执行的时候实例化拦截器Bean,在拦截器配置类里面先实例化拦截器,然后再获取就能解决这个问题。

    /**
     * @author zdk
     * @date 2021/7/6 19:16
     */
    @Configuration
    public class WebConfig implements WebMvcConfigurer {
        /**
         * 添加视图控制器
         */
    
        @Override
        public void addViewControllers(ViewControllerRegistry registry) {
            registry.addViewController("/").setViewName("login");
        }
    
    
        /**
         * 提前实例化拦截器
         * @return
         */
        @Bean
        public LoginHandlerInterceptor getLoginHandlerInterceptor(){
            return new LoginHandlerInterceptor();
        }
    
        /**
         * 添加拦截器时使用getLoginHandlerInterceptor获取已实例化的拦截器
         */
        @Override
        public void addInterceptors(InterceptorRegistry registry) {
            registry.addInterceptor(getLoginHandlerInterceptor())
                    .addPathPatterns("/**")
                    .excludePathPatterns("/login.html","/","/user/userLogin","/user/toLogin")
                    .excludePathPatterns("/**/*.html", "/**/*.js", "/**/*.css", "/**/*.json", "/**/*.icon","/**/*.jpg","/**/*.png");
        }
    
        @Override
        public void addResourceHandlers(ResourceHandlerRegistry registry) {
            registry.addResourceHandler("/static/**").addResourceLocations(ResourceUtils.CLASSPATH_URL_PREFIX + "/static/");
        }
    }
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41

    # springboot整合mybatis-plus时,同时导入mybatis-generator包,会出现冲突,导致serviceBean扫描不到

    # Spring Boot 使用WebMvcConfigurer配置拦截器导致跨域配置失效问题

    使用自定义拦截器时跨域相关配置会失效 原因是请求经过的先后顺序问题,当请求到来时会先进入拦截器中,而不是进入Mapping映射中,所以返回的头信息中并没有配置的跨域信息。浏览器就会报跨域异常。

    解决方法:使用CorsFilter过滤器配合

    在实现WebMvcConfigurer接口配置类中加入下面代码

    private CorsConfiguration addcorsConfig() {
         CorsConfiguration corsConfiguration = new CorsConfiguration();
         List<String> list = new ArrayList<>();
         list.add("*");
         corsConfiguration.setAllowedOrigins(list);
     /*
     // 请求常用的三种配置,*代表允许所有,当时你也可以自定义属性(比如header只能带什么,只能是post方式等等)
     */
         corsConfiguration.addAllowedOrigin("*");
         corsConfiguration.addAllowedHeader("*");
         corsConfiguration.addAllowedMethod("*");
         return corsConfiguration;
     }
     @Bean
     public CorsFilter corsFilter() {
         UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
         source.registerCorsConfiguration("/**", addcorsConfig());
         return new CorsFilter(source);
     }
    
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20

    最终代码是:

    @Configuration
    public class WebMvcConfig implements WebMvcConfigurer {
        @Override
        public void addCorsMappings(CorsRegistry registry) {
            registry.addMapping("/**")
                    .allowedOrigins("*")
                    .allowedOrigins("http://localhost:8080")
                    .allowCredentials(true)
                    .allowedMethods(CorsConfiguration.ALL)
                    .maxAge(3600);
            //一小时内不用再预先检测(发送OPTIONS请求)
        }
    
        @Autowired
        private PermissionInterceptor permissionInterceptor;
    
    
        @Override
        public void addInterceptors(InterceptorRegistry registry) {
            registry.addInterceptor(permissionInterceptor)
                    .excludePathPatterns("/user/login","/user/register")
                    .excludePathPatterns("/menus","/verificationCode")
                    .excludePathPatterns("/swagger*/**", "/v2/**", "/webjars/**");
        }
    
        private CorsConfiguration addcorsConfig() {
            CorsConfiguration corsConfiguration = new CorsConfiguration();
            List<String> list = new ArrayList<>();
            list.add("*");
            corsConfiguration.setAllowedOrigins(list);
        /*
        // 请求常用的三种配置,*代表允许所有,当时你也可以自定义属性(比如header只能带什么,只能是post方式等等)
        */
            corsConfiguration.addAllowedOrigin("http://localhost:8080");
    //        corsConfiguration.addAllowedOrigin("*");
            corsConfiguration.addAllowedHeader("*");
            corsConfiguration.addAllowedMethod("*");
            return corsConfiguration;
        }
        @Bean
        public CorsFilter corsFilter() {
            UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
            source.registerCorsConfiguration("/**", addcorsConfig());
            return new CorsFilter(source);
        }
    
    }
    
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    在 GitHub 上编辑此页 (opens new window)
    #question#SpringBoot
    最后更新: 2022/10/04, 16:10:00
    问题
    java基础相关

    ← 问题 java基础相关→

    Theme by Vdoing | Copyright © 2022-2025 zdk | notes
    湘ICP备2022001117号-1
    川公网安备 51142102511562号
    本网站由 提供CDN加速/云存储服务
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式