Java 春季安全CORS发行版:“;选择权http://localhost:8080/ 403()”;
我一直在从事一个在后端使用spring+spring安全性的项目,最近遇到了cors的一个问题: 您可以看到的前两行成功的api调用输出,随后chrome尝试向my rest服务发送带有选项头的Http请求Java 春季安全CORS发行版:“;选择权http://localhost:8080/ 403()”;,java,spring,spring-security,cors,angular-cli,Java,Spring,Spring Security,Cors,Angular Cli,我一直在从事一个在后端使用spring+spring安全性的项目,最近遇到了cors的一个问题: 您可以看到的前两行成功的api调用输出,随后chrome尝试向my rest服务发送带有选项头的Http请求 我的问题是什么可能是这个问题的根源? 我在dev中的前端使用angular CLI客户端,在我为spring security创建自定义过滤器之前,我没有遇到任何CORS问题,因此添加了我的WebConfigureAdapterconfig。如果需要,乐意提供附加代码。然而,我认为这与
我的问题是什么可能是这个问题的根源?
我在dev中的前端使用angular CLI客户端,在我为spring security创建自定义过滤器之前,我没有遇到任何CORS问题,因此添加了我的
WebConfigureAdapter
config。如果需要,乐意提供附加代码。然而,我认为这与此无关,因为我已经移除了过滤器,同样的问题也发生了
在chrome、firefox和ubuntu浏览器中测试时,也会出现同样的问题
Angular CLI正在成功代理对“/api/[blah]”的调用。
这是我的代理配置,我尝试了所有的匹配,但这没有什么区别
{
"/api/*": {
"target": "http://localhost:8080",
"secure": false,
"logLevel": "debug",
"changeOrigin": true
}
}
WebSecurityAdapter
Config
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.httpBasic()
.and()
.authorizeRequests()
.antMatchers("/index.html", "/api/registration", "/api/authenticate",
"/api/isAuthenticated", "/api/validateCaptcha", "/console", "/api/loginRecaptchaRequired", "/api/login", "/")
.permitAll()
.anyRequest()
.authenticated()
.and()
.addFilterBefore(
authenticationFilter(),
UsernamePasswordAuthenticationFilter.class)
.logout()
.logoutUrl("/api/logout")
.and()
.csrf()
.csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse())
.and()
.addFilterAfter(csrfHeaderFilter(), SessionManagementFilter.class);
}
请求标头:
为什么您的代码不起作用
您缺少Access Control Allow Origin
标题,因此不允许任何站点向您的站点发出CORS请求
修复
您可以:
- 从同一来源发出请求
- 使用spring security将标题添加到响应中
- 手动添加标题
*
,以允许任何来源发送请求
这会停止除白名单以外的所有请求吗
这仅在浏览器中提供保护,恶意软件仍然可以向任何端点发出请求,而无需遵守CORS。您似乎缺少allow origin标头,因此任何源站都不能使用CORS。后端,我会计算出哪些域应该能够发出CORS请求,并在此处列出它们,除非您想公开,然后使用
*
谢谢,使用此添加CORS:谢谢:)我觉得奇怪的一件事是,我已经使用相同的设置一段时间了,但没有添加CORS,理想情况下,我希望设置它,这样我就不必允许cors,这样就不会意外地将cors添加到prod中。此外,允许localhost:4200,攻击者就不能代理自己显示为该站点吗?这更能防止Cookie与请求一起发送,因为攻击者无法以登录用户的身份向API发出请求,即使他们代理访问API。