繁体   English   中英

全局CORS配置无法在Spring Boot中运行

[英]Global CORS configuration not working in Spring Boot

所以我尝试在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时有效

关于我在这里缺少什么的任何想法?

谢谢!

我认为你有一个复制/过去的问题,我想你的服务器在端口8080上的localhost上运行。你应该知道.allowedOrigins应该包含客户端来源,所以改变:

registry.addMapping("/**").allowedOrigins("http://localhost:8080")registry.addMapping("/**").allowedOrigins("http://localhost:[client_port]")

其中client_port是您的客户端端口。


编辑

如果你想获得客户端ip,你可以将HttpServletRequest绑定到你的方法(这只是为了获取客户端地址,一旦完成就可以删除绑定):

@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);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM