zoukankan      html  css  js  c++  java
  • 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,如果其他需求也可以自己添加。

  • 相关阅读:
    bzoj1914
    bzoj3144
    bzoj2756
    poj3177
    一些比较水的题目
    bzoj2282
    屯题50AC纪念
    Base64解码中文部分中文乱码的原因
    随机生成36位字符串
    jQuery判断某个元素是否存在某个样式
  • 原文地址:https://www.cnblogs.com/Zhifeng-Shen/p/13791949.html
Copyright © 2011-2022 走看看