我有以下配置:
@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)由于浏览器缓存而浪费了我很多时间!
(如果有机会,浏览器会跳过预检步骤,为什么服务器不检查实际通话中的来源?必须在服务器或客户端中由浏览器检查?)
答案 0 :(得分:3)
通过添加此属性进行检查。
configuration.setAllowedHeaders(Arrays.asList("*"));