全局cors配置在Spring Boot中不起作用,但单个@CrossOrigins起作用

时间:2019-07-02 13:26:18

标签: spring-boot cors

我有以下配置:

@Bean
    public CorsConfigurationSource corsConfigurationSource() {
        CorsConfiguration configuration = new CorsConfiguration();
        configuration.setAllowedOrigins(Arrays.asList("*"));
        configuration.setAllowedMethods(Arrays.asList("GET","POST","HEAD","DELETE","PUT"));
        configuration.setMaxAge(1l);
        configuration.setAllowCredentials(true);
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        source.registerCorsConfiguration("/**", configuration);
        return source;
    }

和安全配置:

@Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .cors()
            .and()
            .csrf()
            .disable()
            .exceptionHandling()
            .authenticationEntryPoint(unauthorizedHandler)
            .and().sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
            .and().authorizeRequests()
            .antMatchers(
                "/auth/**"
            ).permitAll()
            .antMatchers(HttpMethod.OPTIONS, "/**").permitAll()
            .anyRequest().authenticated()
            ;
}

,但是这种混合方式不起作用。如果我删除CorsConfigurationSource corsConfigurationSource()块并添加@CrossOrigin(origins = "*", maxAge = 1)的cors问题将消失!

但是我想在全球范围内注册cors,这是什么问题?

我使用带有弹簧安全性的Spring Boot版本2和一些Rest控制器。

(maxAge = 1)由于浏览器缓存而浪费了我很多时间!

(如果有机会,浏览器会跳过预检步骤,为什么服务器不检查实际通话中的来源?必须在服务器或客户端中由浏览器检查?)

1 个答案:

答案 0 :(得分:3)

通过添加此属性进行检查。

configuration.setAllowedHeaders(Arrays.asList("*"));