Loading

记一次跨域解决

最开始sprinboot解决跨域问题

使用的继承WebMvcConfiguer类,重写addCorsMappings方法,在CorsRegistry中设置跨域属性

		@Override
        public void addCorsMappings(CorsRegistry registry) {
            registry.addMapping("/**")
                    .allowCredentials(true)
                    .allowedHeaders("*")
                    .allowedOrigins("")
                    .allowedMethods("*")
                    .allowCredentials(true)
                    .maxAge(3600);
        }

但是这样会存在问题:

  • 添加拦截器会导致拦截下来的路径又出现了跨域问题,没有被拦截的路径则可以正常请求;

新的解决方法

上述拦截器问题的原因:该请求在进行跨域验证前就被拦截了。

所以应该提前进行跨域验证,因此增加一个跨域验证的过滤器,过滤器由servlet提供在发生在拦截器之前。

    @Bean
    public CorsFilter corsFilter() {
        CorsConfiguration config = new CorsConfiguration();
        config.setAllowCredentials(true);
        // 设置访问源地址
        config.addAllowedOriginPattern("*");
        // 设置访问源请求头
        config.addAllowedHeader("*");
        // 设置访问源请求方法
        config.addAllowedMethod("*");
        // 有效期 1800秒
        config.setMaxAge(1800L);
        // 添加映射路径,拦截一切请求
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        source.registerCorsConfiguration("/**", config);
        // 返回新的CorsFilter
        return new CorsFilter(source);
    }
posted @ 2023-09-26 15:50  墨鱼yyyl  阅读(16)  评论(0)    收藏  举报  来源