【问题标题】:How to allow CORS in router functions?如何在路由器功能中允许 CORS?
【发布时间】:2017-11-07 08:36:39
【问题描述】:

我正在使用 Spring 5 路由器功能构建一个 Web 应用程序休息控制器来映射请求。

@RestController
public class AdminRest {

public RouterFunction<ServerResponse> route() {
    return RouterFunctions
            .route(RequestPredicates.GET("/admin/organizations"), this::getOrganizations);
}
}

让 Angular 4 项目充当剩余控制器的消费者。

public getOrganizations(): Observable<OrganizationsList> {
return this.http.get(this.getOrganizationsUrl)
  .map((res: Response) => res.json())
  .catch((error: any) => Observable.throw(error.json().error || 'Server error'));
 }

返回此错误

XMLHttpRequest 无法加载 http://ip:port/admin/organizations。请求的资源上不存在“Access-Control-Allow-Origin”标头。因此,Origin 'http://localhost:3000' 不允许访问。响应的 HTTP 状态代码为 500。}

如何在 Spring 5 路由器功能中允许 CORS?

【问题讨论】:

  • 您可以使用 .OPTIONS 而不仅仅是 .GET,因为 CORS 的工作原理是先发送选项请求以获取具有权限的标头。
  • @MartinBarker - 不起作用“XMLHttpRequest 无法加载 ip:port/admin/organizations。对预检请求的响应未通过访问控制检查:没有“Access-Control-Allow-Origin”标头出现在请求的资源。因此不允许访问源“localhost:3000”。响应的 HTTP 状态代码为 500。”
  • 所以你有一个代码错误阻止它响应选项请求使用类似 ARC 插件的 Chrome 插件并以这种方式调试它看看你的服务器发回什么错误如果可以的话,如果没有打开在您的服务器上记录错误并进行日志拖网

标签: angular spring spring-webflux spring-restcontroller


【解决方案1】:

你可以注释为

@CrossOrigin(origins = "http://domain2.com", maxAge = 3600)

更多信息请查看Spring CORS documentation

【讨论】:

    【解决方案2】:

    添加配置文件对我有用

    @Configuration
    @EnableWebFlux
    public class CorsConfig implements WebFluxConfigurer {
        @Override
        public void addCorsMappings(CorsRegistry corsRegistry) {
            corsRegistry.addMapping("/admin/organizations")
                    .allowedOrigins("*")
                    .allowedMethods("GET")
                    .maxAge(3600);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2022-12-09
      • 2021-12-31
      • 2018-03-02
      • 2019-12-30
      • 2020-05-05
      • 2020-06-29
      • 2021-11-17
      • 2021-10-23
      • 2023-03-30
      相关资源
      最近更新 更多