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

Spring Boot:即使使用@CrossOrigin,CORS策略也已阻止从源前端访问后端的XMLHttpRequest

史劲
2023-03-14

我有一个restcontroller,它标记为@CrossOrigin(origins=“*”,allowedHeaders=“*”。然而,尽管在控制器级别有@CrossOrigin(origins=“*”,allowedHeaders=“*”,我的请求仍被CORS策略阻止。

Access to XMLHttpRequest at 'http://localhost:8080/api/v1/foo/bar' from origin 'http://localhost:4200' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.

下面是代码的概要

import lombok.AllArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.annotation.CrossOrigin;
import javax.mail.MessagingException;
import javax.validation.Valid;
import java.io.UnsupportedEncodingException;

@CrossOrigin(origins = "*", allowedHeaders = "*")
@RestController
@RequestMapping(path="/api/v1")
@AllArgsConstructor
public class SomeRestController {

    @Autowired
    private SomeService someService;


    @PostMapping(path="/foo/bar")
    public ResponseEntity<RespObject> dosomething(@Valid @RequestBody RequestDTO requestDTO) 
    .
    .
    .
    //somecode
    }
}

正在从Angular Ui应用程序调用api。

蜜蜂服务。ts

create(candidateInititationDto: CandidateInitiationDTO) {
    return this.httpClient.post<RespObject>(
      "http://localhost:8080/api/v1/foo/bar",
      requestDTO
    );
  }
  1. 到目前为止,这是该微服务中唯一的控制器,我已经在控制器级别和方法级别尝试了@CrossOrigin(origins=“”,allowedHeaders=“”)、@CrossOrigin、@CrossOrigin(origins=“*”)的所有可能组合

这是唯一一个@CrossOrigin不工作的微服务。它在所有其他微服务中运行良好。

共有3个答案

柳威
2023-03-14

终于解决了这个问题。显然,在重构代码时,包名发生了变化,包扫描没有发现。Spring没有抛出404,而是在飞行前请求失败。

我遵循的调试步骤。

>

  • 删除所有其他控制器

    保留尝试调试的一个控制器和方法

  • 邹宣
    2023-03-14

    尝试删除源文件和AllowedHeader并简单地使用

    @交叉起源

    这也将允许所有请求

    佴保臣
    2023-03-14

    尝试将此Bean添加到您的控制器:

    @Bean
    public WebMvcConfigurer corsConfigurer() {
        return new WebMvcConfigurerAdapter() {
            @Override
            public void addCorsMappings(CorsRegistry registry) {
                registry.addMapping("/**").allowedOrigins("*");
            }
        };
    }
    

    例如:

    @RestController
    @RequestMapping(path="/api/v1")
    @AllArgsConstructor
    public class SomeRestController {
    
        @Bean
        public WebMvcConfigurer corsConfigurer() {
            return new WebMvcConfigurerAdapter() {
                @Override
                public void addCorsMappings(CorsRegistry registry) {
                    registry.addMapping("/**").allowedOrigins("*");
                }
            };
        }
    
        @Autowired
        private SomeService someService;
    
    
        @PostMapping(path="/foo/bar")
        public ResponseEntity<RespObject> dosomething(@Valid @RequestBody RequestDTO requestDTO) 
        .
                .
                .
        //somecode
    }
    
     类似资料:
    • CORS策略已阻止CORS从源站对X处XMLHttpRequest的访问:对飞行前请求的响应未通过访问控制检查:它没有HTTP ok状态。 嗨,我正在努力解决我的问题与CORS拒绝我的Vue组件与外部API与axios的交互,因为它返回此错误。我尝试了使用Barryvdh的Cors头支持和制作中间件和自定义路由。这根本行不通。Barryvdh回购中README. md中提到的一切都已经完成,不幸的

    • 有点晚了,但我记得我最终通过在后端的配置中设置来解决这个问题。 完全偶然地,我注意到如果我在前端的客户端中设置,一切都正常工作。然而,将其切换到不断抛出错误。然后我把两个和两个放在一起,在后端设置,一切都按预期工作。 我的应用程序使用cookie,所以必须这样做。 这可能是重复的,但我没有找到与我的问题相关的线索。 我正在进行以下API调用: 这会引发一个错误: 当我将我的应用程序部署到Herok

    • 访问位于“”的XMLHttpRequesthttp://localhost:8080/api/auth/signup“起源”https://mysuite.ru'已被CORS策略阻止:对飞行前请求的响应未通过访问控制检查:飞行前请求不允许重定向。 通过nginx重定向 使现代化 请求标头: 加载项nginx: 还没有结果

    • 当我尝试在角7网络应用程序中执行补丁请求时,我遇到了一个问题。在我的后端,我有: 在我的前端服务中,我: 错误是: 我能做什么?谢谢

    • 我有一个。NET核心应用程序,它有一个REST API被一个角客户机使用,但遇到了CORS问题。 但仍在客户端(运行在本地端口4200上)中获取错误: CORS策略阻止从来源“HTTP://localhost:4200”访问位于“HTTP://localhost/myapi/api/table”的XMLHttpRequest:对飞行前请求的响应没有通过访问控制检查:它没有HTTP ok状态。