• springSecurity跨域CORS处理


    续言

    之前 知识追寻者写过关于springboot 的跨域处理,并且介绍了跨域相关的概念;具体的可以查看这篇知识追寻者springboot教程系列文章

    https://zszxz.com/category/springboot/article/16

    关于跨域处理其实挺奇怪,spring, springboot, springSecurity 他们的跨域处理方式都不同!

    spring的跨域处理

    关于spring的跨域处理可以直接在类或者方法上使用 @CrossOrigin 达到目的;但这只能进行局部处理,如果需要全局处理则需要按如下方式进行配置

     
    @Configuration
    @EnableWebMvc
    public class WebConfig implements WebMvcConfigurer {
     
     
        @Override
        public void addCorsMappings(CorsRegistry registry) {
     
            registry.addMapping("/api/**")
                .allowedOrigins("https://zszxz.com")
                .allowedMethods("GET","POST","PUT", "DELETE")
                .allowedHeaders("header1", "header2", "header3")
                .exposedHeaders("header1", "header2")
                .allowCredentials(true).maxAge(3600);
     
            // ...
        }
    }
    

    springboot 跨域处理

    在springboot 中 一般情况下可以使用 springMvc的跨域方式配置,但是有时关于系统配置jdk等问题,会造成跨域失效,则需要按如下方式进行配置

    @Configuration
    public class WebConfig  {
    
        @Bean
        public CorsFilter corsFilter() {
            //1. 添加 CORS配置信息
            CorsConfiguration config = new CorsConfiguration();
            //放行哪些原始域
            config.addAllowedOrigin("https://zszxz.com");
            //是否发送 Cookie
            config.setAllowCredentials(true);
            //放行哪些请求方式
            config.addAllowedMethod("*");
            //放行哪些原始请求头部信息
            config.addAllowedHeader("*");
            //暴露哪些头部信息
            //config.addExposedHeader("*");
            //2. 添加映射路径
            UrlBasedCorsConfigurationSource corsConfigurationSource = new UrlBasedCorsConfigurationSource();
            corsConfigurationSource.registerCorsConfiguration("/**",config);
            //3. 返回新的CorsFilter
            return new CorsFilter(corsConfigurationSource);
        }
    
    }
    

    springSecurity跨域处理

    在springSecurity中 配置方式和springboot 的配置区别方式不一样 ,则需要按如下方式进行配置。

    @EnableWebSecurity
    public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
    
        @Override
        protected void configure(HttpSecurity http) throws Exception {
            http
                // by default uses a Bean by the name of corsConfigurationSource
                .cors().and()
                ...
        }
    
        @Bean
        CorsConfigurationSource corsConfigurationSource() {
            CorsConfiguration configuration = new CorsConfiguration();
            configuration.setAllowedOrigins(Arrays.asList("https://zszxz.com"));
            configuration.setAllowedMethods(Arrays.asList("GET","POST"));
            UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
            source.registerCorsConfiguration("/**", configuration);
            return source;
        }
    }
    

    官方示例中,以下这种配置,知识追寻者试过,没生效

    @EnableWebSecurity
    public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
    
        @Override
        protected void configure(HttpSecurity http) throws Exception {
            http
                // if Spring MVC is on classpath and no CorsConfigurationSource is provided,
                // Spring Security will use CORS configuration provided to Spring MVC
                .cors().and()
                ...
        }
    }
    

    网上 说需要将 X-Frame-Options 头禁用调即可,当然我使用第一种方式就可以了,此方式不再尝试, 有兴趣的读者可以进行验证!

    @Configuration
    @EnableWebSecurity
    public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
    
        @Override
        protected void configure(HttpSecurity http) throws Exception {
            // 开启允许iframe 嵌套
            http.headers().frameOptions().disable();
    
            http.csrf().disable()
                // 开启跨域
                .cors().and()
    
                .....
        }
    
    }
    
    

    本套教程

    源码地址: 关注公众号知识追寻者:回复 springSecurity 获取

  • 相关阅读:
    EF实现增删改查
    托管代码与非托管代码的区别
    堆、栈以及队列
    C#装箱和拆箱
    Leecode刷题之旅-C语言/python-349两个数组的交集
    Leecode刷题之旅-C语言/python-344反转字符串
    Leecode刷题之旅-C语言/python-217存在重复元素
    Leecode刷题之旅-C语言/python-206反转链表
    Leecode刷题之旅-C语言/python-204计数质数
    Leecode刷题之旅-C语言/python-203移除链表元素
  • 原文地址:https://www.cnblogs.com/zszxz/p/14664833.html
Copyright © 2020-2023  润新知