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

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

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

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

我的项目在下面。

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

【问题讨论】:

标签: java spring spring-boot spring-security cors


【解决方案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()... 中的点应该写什么?
猜你喜欢
  • 2020-05-29
  • 2021-06-26
  • 2017-03-06
  • 2019-07-16
  • 2016-08-26
  • 2021-11-06
相关资源
最近更新 更多