当前位置: 首页 > 知识库问答 >
问题:

无法在Spring Boot应用程序提供的响应中设置'Access-Control-Allow-Origin'标头

仰英发
2023-03-14
The value of the 'Access-Control-Allow-Origin' header in the response must 
not be the wildcard '*' when the request's credentials mode is 'include'. 
Origin 'http://localhost:4200' is therefore not allowed access. The 
credentials mode of requests initiated by the XMLHttpRequest is controlled by 
the withCredentials attribute.
let headers = new Headers({
"Content-Type": "application/x-www-form-urlencoded"});
let options = new RequestOptions({ headers: headers ,withCredentials:true});

//body contains username and password.
this.http.post('http://localhost:8080/login',{body}, options).
subscribe(response => {
    console.log(response)    
});
@CrossOrigin(origins = "http://localhost:4200",allowCredentials="true")
@RestController
public class SecurityApplication {
...  //Rest Api's
}
//Security Config
protected void configure(HttpSecurity http) throws Exception {
    http.
        cors().and().httpBasic().and().formLogin()
        .and()
        .authorizeRequests()
            .antMatchers( "/", "/home", "/login").permitAll()
            .anyRequest().authenticated();
}

我参考了https://www.concretepage.com/spring-4/spring-4-rest-cors-integration-using-crossorigin-annotation-xml-filter-example,根据它,orgins=“http://localhost:4200”应该将响应头中的access-control-allog-orgin设置为提供给它的值,但我仍然得到通配符'*'作为响应。

我试过corsFilters,但不起作用。我在Chrome浏览器中启用了CORS扩展。我想知道为什么它没有将Access-Control-Allow-Origin设置为我提供的值,以及如何解决它。

共有1个答案

程磊
2023-03-14

一种方法是不设置交叉原点。相反,在您的angular应用程序中,创建一个代理文件proxy.conf.json,当启动您的angular时,使用

ng serve --proxy-conf proxy.conf.json

那么proxy.conf.json的内容将是:

{
    "/api": {
        "target": "http://localhost:8080/api",
        "secure": false,
        "changeOrigin": "true",
        "pathRewrite": {
            "^/api": ""
        } 
    }
}

最后,在spring boot application中的application.Properties中,您可以设置:

server.context-path=/api
this.http.post('/api/login',{body}, options).subscribe(response => {
    console.log(response)    
});
 类似资料:
  • 我尝试了几种方法来设置CORS头: null Chrome调试器在控制台中显示了以下内容: XMLHttpRequest无法加载http://localhost:8080/hop-backend/rest/shop/listhotelslandingPage。请求的资源上没有“访问-控制-允许-来源”标头。因此,不允许访问源'http://localhost:9000'。响应的HTTP状态代码为5

  • 我目前正在转换一个项目从。NET框架进入。网5. 当我到达新系统中的一个endpoint时。NET5项目我得到以下异常。 系统InvalidOperationException:'误用的标头名称,'访问控制允许源'。确保请求头与HttpRequestMessage一起使用,响应头与HttpResponseMessage一起使用,内容头与HttpContent对象一起使用。” endpoint看起来

  • 我正在尝试使用我的(CORS兼容的)RESTful服务 从我的AngularJS应用程序。 但我有一个错误: https://spring.io/guides/gs/consuming-rest-angularjs/ 使用他们的RESTful服务(他们说也兼容CORS),但结果是一样的。 PS:我使用WebStorm作为IDE。 Access-Control-Allow-Headers不允许请求标

  • 我得到这些错误在浏览器 “响应必须包含AMP Access Control Allow Source Origin标头” 和 表单提交失败:错误:响应必须包含AMP Access Control Allow Source Origin标头​​​" php HTML 我如何编辑它,以避免这些错误?

  • Access-Control-Allow-Origin响应 header 指示是否该响应可以与具有给定资源共享原点。 Header type Response header Forbidden header name no 语法 Access-Control-Allow-Origin: *Access-Control-Allow-Origin: <origin> 指令 * 对于没有凭据的请求,服务

  • 问题内容: 我的Codeigniter文件说 但是我得到的http响应是: 即使包含,响应中仍缺少标题。我有关此标头的信息来源来自Mozilla开发人员网站 问题答案: 事实证明,仅当我通过PHP语法而不是codeigniter语法设置标头时,它才对我有用。真伤心