使用 CorsRegistry/@CrossOrigin 配置 Spring 后仍然出现 CORS 错误 [关闭]

Posted

技术标签:

【中文标题】使用 CorsRegistry/@CrossOrigin 配置 Spring 后仍然出现 CORS 错误 [关闭]【英文标题】:still getting CORS error after configuring Spring with CorsRegistry/@CrossOrigin [closed] 【发布时间】:2019-04-29 20:51:39 【问题描述】:

使用 CorsRegistry 配置/@CrossOrigin 配置 Spring 后端,发送 XMLHttpRequest 时我仍然收到 CORS 错误。

注意,这仅在我发送 DELETE 请求时发生。对于 GET 和 POST,它似乎工作正常..

@RestController
@RequestMapping(path="abouts",
                produces="application/json",
                consumes="application/json")
@CrossOrigin(origins="*")
public class AboutController 

    private AboutRepository aboutRepo;

    public AboutController(AboutRepository aboutRepo) 
        this.aboutRepo = aboutRepo;
    

    @GetMapping
    public Iterable<About> getAbouts() 
        return aboutRepo.findAll();
    

    @GetMapping("/aboutId")
    public ResponseEntity<About> aboutById(@PathVariable("aboutId") Long id) 
        Optional<About> optAbout = aboutRepo.findById(id);
        if (optAbout.isPresent())
            return new ResponseEntity<>(optAbout.get(), HttpStatus.OK);
        
        return new ResponseEntity<>(null, HttpStatus.NOT_FOUND);
    

    @PostMapping
    @ResponseStatus(HttpStatus.CREATED)
    public About postAbout(@RequestBody About about) 
        return aboutRepo.save(about);
    

    @PutMapping("/aboutId")
    public About putAbout(@RequestBody About about) 
        return aboutRepo.save(about);
    

    @DeleteMapping("/aboutId")
    @ResponseStatus(code = HttpStatus.NO_CONTENT)
    public void deleteEvent (@PathVariable("aboutId") Long aboutId) 
        try 
            aboutRepo.deleteById(aboutId);
        catch (EmptyResultDataAccessException e) 
        
    

JS

function deleteAbout (e) 
    let id = e.target.getAttribute("id").slice(5);
    let xhr = new XMLHttpRequest();
    xhr.onload = () => 
        getAbouts();
    
    xhr.open("DELETE","http://localhost:8080/abouts/" + id);
    xhr.setRequestHeader("Content-Type", "application/json");
    xhr.setRequestHeader('Access-Control-Allow-Headers', '*');
    xhr.send();


window.addEventListener("load", getAbouts);

【问题讨论】:

首先从您的前端 javascript 代码中删除 xhr.setRequestHeader("Content-Type", "application/json")xhr.setRequestHeader('Access-Control-Allow-Headers', '*')。您正在执行 DELETE 请求,而不是发送任何请求正文,因此为请求设置 Content-Type 是没有意义的。并且 Access-Control-Allow-Headers 标头是响应标头,而不是请求标头。为请求设置它只会导致事情进一步恶化。 找到了,谢谢.. 还需要 JSON 标头,因为控制器上的消耗 anno,似乎是糟糕的设计,但哦,atm。删除了 ACAH 标题,谢谢 【参考方案1】:

语法错误..删除方法上缺少 ,弹簧控制器...对不起,伙计们

我修好后工作

【讨论】:

这就是它不起作用的原因

以上是关于使用 CorsRegistry/@CrossOrigin 配置 Spring 后仍然出现 CORS 错误 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

在使用加载数据流步骤的猪中,使用(使用 PigStorage)和不使用它有啥区别?

今目标使用教程 今目标任务使用篇

Qt静态编译时使用OpenSSL有三种方式(不使用,动态使用,静态使用,默认是动态使用)

MySQL db 在按日期排序时使用“使用位置;使用临时;使用文件排序”

使用“使用严格”作为“使用强”的备份

Kettle java脚本组件的使用说明(简单使用升级使用)