如何允许所有域的CrossOrigin?

时间:2019-09-27 01:48:27

标签: spring-boot cors

反正有没有让这个端点允许来自任何地方的请求?

我尝试过,但是没有一个起作用。

  

@CrossOrigin(来源=“ ”)
  @CrossOrigin(origins =“ http://
”)

@CrossOrigin(origins = "http://localhost:3001")
@GetMapping(path="/transactions")
public @ResponseBody List<RealEstateTransaction> getTransactions() {
    return realEstateTransactionService.findTargets();
}

1 个答案:

答案 0 :(得分:1)

在使用跨域时,大多数时候我们倾向于担心问题出在哪里以及出了什么问题。在处理请求之前,需要在服务器端处理许多因素,包括安全性,Web组件,套接字等。在Spring Boot应用程序中实现CORS的多种方法。

1。注释

通过像在@CrossOrigin类中所做的一样实现Main。如果仅应从特定域访问特定的API,也可以通过在特定的控制器/方法中添加@CrossOrigin来完成。

@CrossOrigin("*") // to allow from all domains
@CrossOrigin("http://localhost:3001") // to allow from specific domain
@CrossOrigin(origins = "http://localhost:3001")

2。 WebConfig

如果Spring Application是可以访问资源的MVC。只需覆盖WebMvcConfigurer's addCorsMappings函数即可添加CORS映射。

@Configuration
@EnableWebMvc
public class WebConfig implements WebMvcConfigurer {

    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**").allowedOrigins("*").allowedHeaders("*");
    }
}
  1. SecurityConfig 在应用程序中启用安全性后,必须在SecurityConfig中实现CORS。注册CORS过滤器可以通过多种方式完成。一种是将UrlBasedCorsConfigurationSource添加到http.cors()函数。另一种方法是通过扩展CustomCorsFilter来创建CorsFilter
public class CustomCorsFilter extends CorsFilter {

    public CustomCorsFilter() {
        super(configurationSource());
    }

    public static UrlBasedCorsConfigurationSource configurationSource() {
        CorsConfiguration configuration = new CorsConfiguration();
        configuration.setAllowCredentials(true);
        configuration.addAllowedOrigin("*");
        configuration.addAllowedHeader("*");
        configuration.setMaxAge(3600L);

        UrlBasedCorsConfigurationSource corsConfigurationSource = new UrlBasedCorsConfigurationSource();
        corsConfigurationSource.registerCorsConfiguration("/**", configuration);

        return corsConfigurationSource;
    }
}

@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        String[] paths = {"/auth/**", "/env"};

        //http.cors().configurationSource(CustomCorsFilter.configurationSource()); // Option 1

        http
            .csrf().disable()
            .exceptionHandling()
            .authenticationEntryPoint(this.authenticationEntryPoint)
        .and()
            .authorizeRequests()
            .antMatchers(paths)
            .permitAll()
        .and()
            .authorizeRequests()
            .antMatchers("/**")
            .authenticated()
        .and()
            .addFilterBefore(new CustomCorsFilter(), UsernamePasswordAuthenticationFilter.class); //option 2
}