Spring cloud gateway 使用总结

Spring cloud gateway 使用总结

一、跨域配置

由于前端通过网关调用,一般是跨域的请求。所以可以在Spring Cloud Gateway直接配置跨域配置,而下游服务就不同配置跨域了。

可以在application.yml这样配置,这是比较细粒度的配置(这是Spring 官方文档提供的配置:https://cloud.spring.io/spring-cloud-static/spring-cloud-gateway/2.1.0.RELEASE/multi/multi__cors_configuration.html):

spring:
  cloud:
    gateway:
      globalcors:
        corsConfigurations:
          '[/**]':
            allowedOrigins: "http://docs.spring.io"
            allowedMethods:
            - GET

为了方便你可以粗略地配置,让所有请求都做跨域处理:

spring:
  cloud:
    gateway:
      # 跨域
      globalcors:
        corsConfigurations:
          '[/**]':
            allowCredentials: true
            allowedOrigins: "*"
            allowedMethods: "*"
            allowedHeaders: "*"

Spring cloud gateway 结合 Oauth2 Resource Server 认证失败跨域配置失效问题

问题描述:使用自定义AuthorizationManager进行权限检查时,如果用户没有权限则授权失败。但是前端请求显示为跨域错误。

原因:我猜可能是AuthorizationManager认证失败后,之后请求的处理没走到之前配置跨域配置的过滤器,导致跨域失败。

解决方案:我们知道浏览器对访问跨域资源先发送一个OPTION请求,看是否能否跨域访问,如果允许跨域就继续请求。(参考文章[浏览器何时发送一个Option请求)。因此我们对于自定义AuthorizationManager授权逻辑应该对OPTION请求无条件通过,以便浏览器进一步请求。

这仅仅第一步,如果非OPTION请求但是授权失败了,我们还会遇到跨域错误。因此在授权失败时候我们要手动进行跨域处理。

定义我们自己的ServerAuthenticationEntryPoint这个主要是Oauth2授权处理。

这里主要关注processCorsHeaders这个方法。这里添加HTTP请求头的Access-Control-Allow-Origin,如果其他需求也可以自己添加。

posted @ 2020-10-10 12:54  Zhifeng_Shen  阅读(31)  评论(0编辑  收藏