【发布时间】:2022-09-29 22:07:13
【问题描述】:
我正在尝试设置最小标头以允许 CORS 到不同端口上的同一台机器。在编写这些行时,我正在使用最新的 SpringBoot 和 SpringSecurity。 文档很差,示例不够广泛。 以前版本的 SpringSecurity 有很多例子,但是在 5.7.x 版本中,他们更改了 API, 意思就是所有的例子现在都过时了.
我发现自己浪费了太多时间试图弄清楚如何正确地做事,但没有成功。
Bellow 是我最后一次尝试配置 CORS。
如果你们中的任何人知道为什么缺少 ORIGIN 标头以及如何启用它们,那将不胜感激。
TIA, 阿萨夫·格里
package com.madas.restapi;
import java.util.Arrays;
import org.springframework.context.annotation.Bean;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.web.SecurityFilterChain;
import org.springframework.security.web.header.writers.ContentSecurityPolicyHeaderWriter;
import org.springframework.security.web.header.writers.CrossOriginResourcePolicyHeaderWriter;
import org.springframework.security.web.header.writers.frameoptions.XFrameOptionsHeaderWriter;
import org.springframework.security.web.header.writers.frameoptions.XFrameOptionsHeaderWriter.XFrameOptionsMode;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.CorsConfigurationSource;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
@EnableWebSecurity
public class WebSecurityConfig {
@Bean
CorsConfigurationSource corsConfigurationSource() {
CorsConfiguration configuration = new CorsConfiguration();
configuration.setAllowedOrigins(Arrays.asList(\"http://localhost\"));
configuration.setAllowedMethods(Arrays.asList(\"GET\",\"POST\"));
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
source.registerCorsConfiguration(\"/**\", configuration);
return source;
}
@Bean
SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http
.authorizeHttpRequests((authz) -> authz
.anyRequest().permitAll()
)
.headers(headers -> headers
.addHeaderWriter(new CrossOriginResourcePolicyHeaderWriter())
.addHeaderWriter(new XFrameOptionsHeaderWriter(XFrameOptionsMode.SAMEORIGIN))
.addHeaderWriter(new ContentSecurityPolicyHeaderWriter(\"object-src localhost;\"))
);
return http.build();
}
}
-
您必须在安全过滤器链中使用
.cors()启用 CORS。 -
@dur您所指的问题太老了,因此提到的解决方案不是最新的。 API 在 2021 年左右的某个时候发生了更改(该更改是在 Spring Security 5.7.x 的某个地方引入的)Spring 团队并没有费心去更新他们的官方文档,更不用说大量的代码示例了,这些示例几乎为零。找到可以解决问题的正确代码涉及一些巫术(或者我应该说 [source]ry 技能)...感谢您尝试提供帮助 <3
-
这个问题很老,但答案仍然是正确的。没关系,基类被弃用了,
HttpSecurity类仍然有.cors()方法。
标签: java spring spring-boot spring-mvc spring-security