• springboot 跨域配置(处理filter,spring security等过滤器跨域问题)


    springboot 跨域配置(处理filter,spring security等过滤器跨域问题)

    传统跨域是springboot中CorsRegistry添加添加处理的CorsMapping,这种跨域处理可以处理controller的请求。

    @Configuration
    public class CorsConfig implements WebMvcConfigurer {
        static final String[] ORIGINS = new String[] { "GET", "POST", "PUT", "DELETE" };
        @Override
        public void addCorsMappings(CorsRegistry registry) {
            // 所有的当前站点的请求地址,都支持跨域访问。
            registry.addMapping("/**")
                    // 所有的外部域都可跨域访问
                    .allowedOrigins("*")
                    // 是否支持跨域用户凭证
                    .allowCredentials(true)
                    // 当前站点支持的跨域请求类型是什么
                    .allowedMethods(ORIGINS)
                    // 超时时长设置为1小时,时间单位是秒。
                    .maxAge(3600);
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    但如果遇到spring boot集成spring security的时候,登录时处理是在filter中的,传统的跨域没有办法处理,这时候我们要采用一种新的实现方案:基于filter的跨域实现。

    基于filter实现可以处理filter中的跨域问题,这里原理很简单,需要注意是要设置CorsFilter的优先级:Ordered.HIGHEST_PRECEDENCE(加载到过滤器链最前面!!!)

    @Configuration
    public class CorsConfig {
    
        private CorsConfiguration buildConfig() {
            CorsConfiguration corsConfiguration = new CorsConfiguration();
            corsConfiguration.addAllowedOrigin("*");
            corsConfiguration.addAllowedHeader("*");
            corsConfiguration.addAllowedMethod("*");
            corsConfiguration.addExposedHeader("*");
            return corsConfiguration;
        }
    
    
        @Bean
        public FilterRegistrationBean<CorsFilter> corsFilter() {
            UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
            // 对接口配置跨域设置
            source.registerCorsConfiguration("/**", buildConfig());
            //有多个filter时此处设置改CorsFilter的优先执行顺序
            FilterRegistrationBean<CorsFilter> bean = new FilterRegistrationBean<>(new CorsFilter(source));
            bean.setOrder(Ordered.HIGHEST_PRECEDENCE);
            return bean;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    经过测试,这种处理方法可以轻松应对springboot的跨域问题。

  • 相关阅读:
    如何使用SQL系列 之 如何在MySQL中使用索引
    【计算机网络】什么是HTTPS?HTTPS为什么是安全的?
    python实现Flask GET Demo
    深度学习基础网络整理----AlexNet
    复习十二:广义表
    良品铺子:已成“良品”,但能成“优品”吗?
    java 企业工程管理系统软件源码+Spring Cloud + Spring Boot +二次开发+ MybatisPlus + Redis
    SLAM从入门到精通(rviz自定义形状)
    软件项目管理【UML-类图】
    一键自动化博客发布工具,用过的人都说好(掘金篇)
  • 原文地址:https://blog.csdn.net/zhongjianboy/article/details/126322536