因此,我尝试在Spring Boot应用程序中添加全局CORS配置。当我授权所有来源时(可以在CorsRegistry.allowedOrigins中添加'*'),我可以使其工作,但是当我尝试为示例指定http://localhost:8080时,它就行不通了。
我的控制器
@RestController
@RequestMapping("/api")
public class Controller {
@GetMapping("/svc")
public ResponseEntity<String> method(@RequestParam(required = false) String id) {
//some code
}
我的配置:
@Configuration
public class Configuration {
@Bean
public WebMvcConfigurer corsConfigurer() {
return new WebMvcConfigurer() {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**").allowedOrigins("http://localhost:8080")
.allowedMethods("POST", "GET", "PUT", "OPTIONS", "DELETE")
;
}
};
}
因此无法正常工作。但是当我放
registry.addMapping("/**").allowedOrigins("*")
当我从客户端致电http://localhost:8080/api/svc?id=999时,它可以工作。
对我在这里缺少什么有任何想法吗?
谢谢!
答案 0 :(得分:0)
我认为您有一个复制/粘贴问题,并且我想您的服务器正在端口8080上的本地主机中运行。您应该意识到registry.addMapping("/**").allowedOrigins("http://localhost:8080")
应该包含客户端起源,因此请更改:
registry.addMapping("/**").allowedOrigins("http://localhost:[client_port]")
至@GetMapping("/client/ip")
public ResponseEntity<String> getClientIp(HttpServletRequest request) {
String clientAddress = "";
if (Objects.nonNull(request)) {
clientAddress = request.getHeader("X-FORWARDED-FOR");
if (Objects.nonNull(request) || "".equals(remoteAddr)) {
clientAddress = request.getRemoteAddr();
}
}
return ResponseEntity.ok().body(clientAddress);
}
。
其中 client_port 是您的客户端端口。
编辑
如果要获取客户端ip,可以将HttpServletRequest绑定到您的方法(这仅用于获取客户端地址,完成后可以删除绑定):
concatMap