如何在 Spring Boot 中在 Spring Security 级别启用 CORS [关闭]

Posted

技术标签:

【中文标题】如何在 Spring Boot 中在 Spring Security 级别启用 CORS [关闭]【英文标题】:How to enable CORS at Spring Security level in Spring boot [closed] 【发布时间】:2018-08-02 05:57:36 【问题描述】:

我正在使用一个使用 Spring 的 Spring Boot 应用程序 安全。我试过@CrossOrigin 来启用cors,但没有成功。

如果你想找到我的错误,请参考this

Spring Blogs 表示,当我们使用 spring security 时,我们必须在 spring 安全级别启用 cors

我的项目在下面。

谁能解释我应该把这些配置放在哪里以及如何找到弹簧安全级别。

【问题讨论】:

我尝试过的可以从上面的链接中看到我之前的堆栈问题。 Gamage 我已经回答了这个问题***.com/questions/44067871/… 进一步参考这个spring.io/blog/2015/06/08/cors-support-in-spring-framework 问题已解决。在***.com/questions/48919460/…上查看我的答案 【参考方案1】:

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

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

@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;
    

【讨论】:

这里的 ImmutableList 是什么? 我已经找到了解决方案并将其插入到我之前的帖子中。我不被允许回答这个问题。谢谢@henchiri 和Sibin cms,因为它结合了您的答案。两者都 +1【参考方案2】:

带有 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;
    

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

【讨论】:

@LahiruGamage 没关系,它和其他任何东西一样都是 Spring bean,所以只要它在相对于主类的(子)包中,它就可以工作。 我已经找到了解决方案并将其插入到我之前的帖子中。我不被允许回答这个问题。谢谢henchiri和@Sibin,因为它结合了您的答案。两者都 +1 http.cors().and()... 中的点应该写什么?

以上是关于如何在 Spring Boot 中在 Spring Security 级别启用 CORS [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

无法连接到我本地 Spring Boot 中在 docker 上运行的 redis sentinel

如何在单个 JUnit 测试中运行两个 Spring Boot 微服务?

Spring boot的Controller类是如何指定HTML页面的

spring boot加mybatis使用Map返回值设置

在 Spring 中在嵌入式 Jetty 上配置 Spring Security

Spring Boot:Spring Boot 如何测试打包部署