全局CORS配置在Spring Boot中不起作用

时间:2019-04-16 14:54:27

标签: java spring spring-boot cors

因此,我尝试在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时,它可以工作。

对我在这里缺少什么有任何想法吗?

谢谢!

1 个答案:

答案 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