springboot:报错Invalid CORS request, CORS 跨域请求设置

SpringBoot提供的跨域配置有两种,一种是全局的,一种是具体到方法的。如果同时配置了那么具体方法的优先。

全局跨域配置

提供一个自定义的WebMvcConfigurer bean,该bean的addCorsMappings方法中定义自己的跨域配置。
可以看到我的跨域配置是允许来自http://localhost:6677访问/user/users/*的方法。等程序运行后我们可以发现如果我们的前端使用http://127.0.0.1:6677 或者我们的前端运行在http://localhost:8080都无法通过rest访问对应的API(备注,示例程序提供了/user/users和/user/users/{userId}方法)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
package com.yq;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;

@SpringBootApplication
public class CorsDemoApplication {

public static void main(String[] args) {
SpringApplication.run(CorsDemoApplication.class, args);
}

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

此处,设置addMapping是设置访问路径(pathPattern—),设置了可以被跨域访问的路径和可以被哪些主机跨域访问,而不是设置包的路径。即包名为app.api.controller,但是controller里面的地址设置为/user/paper/,/user/user/,则这里应该写为/user/**。

具体方法的跨域配置@CrossOrigin

我们可以使用@CrossOrigin在具体的API上配置跨域设置。@CrossOrigin(origins = “http://localhost:9000”)表明该方法允许来自http://localhost:9000访问,也就是前端可以是localhost:9000。

1
2
3
4
5
6
7
@ApiOperation(value = "查询所有用户")
@CrossOrigin(origins = "http://localhost:9000")
@GetMapping(value = "/users", produces = "application/json;charset=UTF-8")
public Iterable<User> findAllUsers() {
Collection<User> users = userMap.values();
return users;
}

-------------本文结束 感谢您的阅读-------------