如何在Spring Boot中以Spring Security级别启用CORS

Lah*_*age 4 java spring spring-security cors spring-boot

我正在使用使用Spring Security的Spring Boot应用程序。我尝试了@CrossOrigin来启用cors,但是没有用。

如果要查找我的错误,请参考

Spring Blogs说,当我们使用Spring Security时,必须在spring安全级别启用cors

我的项目在下面。

谁能解释我应该将那些配置放在哪里以及如何找到spring安全级别。

bec*_*iri 7

这是一种使Spring Security 4.1通过Spring BOOT 1.5支持CROS的方法

  @Configuration
public class WebConfig extends WebMvcConfigurerAdapter {
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**")
           .allowedMethods("HEAD", "GET", "PUT", "POST", "DELETE", "PATCH");
    }
}
Run Code Online (Sandbox Code Playgroud)

@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
//        http.csrf().disable();
        http.cors();
    }
    @Bean
    public CorsConfigurationSource corsConfigurationSource() {
        final CorsConfiguration configuration = new CorsConfiguration();
        configuration.setAllowedOrigins(ImmutableList.of("*"));
        configuration.setAllowedMethods(ImmutableList.of("HEAD", "GET", "POST", "PUT", "DELETE", "PATCH"));
        configuration.setAllowCredentials(true);
        configuration.setAllowedHeaders(ImmutableList.of("Authorization", "Cache-Control", "Content-Type"));
        final UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        source.registerCorsConfiguration("/**", configuration);
        return source;
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 这里的ImmutableList是什么? (2认同)

Sib*_*med 5

带有 Spring Security 的 CORS

要通过 Spring 安全性启用 CORS 支持,请配置 CorsConfigurationSource bean 并使用 HttpSecurity.cors() 配置。

@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
 
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.cors().and()
            //other config
    }
 
    @Bean
    CorsConfigurationSource corsConfigurationSource() 
    {
        CorsConfiguration configuration = new CorsConfiguration();
        configuration.setAllowedOrigins(Arrays.asList("https://example.com"));
        configuration.setAllowedMethods(Arrays.asList("GET","POST"));
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        source.registerCorsConfiguration("/**", configuration);
        return source;
    }
}
Run Code Online (Sandbox Code Playgroud)

参考https://howtodoinjava.com/spring-boot2/spring-cors-configuration/

  • @LahiruGamage没关系,它是一个像其他任何bean一样的Spring bean,所以只要它位于相对于主类的(子)包中,它就可以工作。 (4认同)