我一直致力于在我的后端使用spring + spring安全性的项目,并且最近特别遇到了cors的问题:
前两行你可以看到成功的api通话输出,然后Chrome会尝试向我的休息服务发送带有选项标题的Http请求。
我的问题可能是这个问题的根源?
我在Dev中的前端使用角度CLI客户端,我没有遇到任何CORS问题,直到我为spring安全性创建了一个自定义过滤器,因此添加了我的WebConfigurerAdapter
配置。如果需要,很高兴提供额外的代码。但是我并不认为它与之相关,因为我已经删除了过滤器并且出现了同样的问题。
在chrome,firefox和ubuntu浏览器中测试过相同的问题。
Angular CLI成功代理对'/ api / [blah]'的调用
这是我的代理配置,我尝试过匹配所有内容,但这没有任何区别。
{
"/api/*": {
"target": "http://localhost:8080",
"secure": false,
"logLevel": "debug",
"changeOrigin": true
}
}
WebSecurityAdapter
配置
@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);
}
答案 0 :(得分:3)
您缺少Access-Control-Allow-Origin
标头,因此不允许任何网站向您的网站发出CORS请求
你可以:
标题可以是允许的原始白名单,也可以*
允许任何来源发送请求。
这仅在浏览器中受到保护,恶意软件仍然可以向任何端点发出请求,而不必遵守CORS。