• 解决gateway跨域问题


    只要与当前浏览器访问的url不同(协议,域名,端口号),就会产生跨域。

    1. 配置文件解决,在gateway的配置文件中

    1. spring:
    2. cloud:
    3. gateway:
    4. globalcors:
    5. cors-configurations:
    6. '[/**]':
    7. allowedOrigins: "*"
    8. allowedHeaders: "*"
    9. allowedMethods: "*"
    10. default-filters:
    11. - DedupeResponseHeader=Vary Access-Control-Allow-Origin Access-Control-Allow-Credentials, RETAIN_FIRST

    注:要加上最下边的配置,不然浏览器还是会报跨域问题,因为浏览器Vary 和 Access-Control-Allow-Origin 两个头重复了两次,其中浏览器对后者有唯一性限制!

    2.配置类

    1. @Component
    2. public class CorsResponseHeaderFilter implements GlobalFilter, Ordered {
    3. private static final Logger logger = LoggerFactory.getLogger(CorsResponseHeaderFilter.class);
    4. private static final String ANY = "*";
    5. @Override
    6. public int getOrder() {
    7. // 指定此过滤器位于NettyWriteResponseFilter之后
    8. // 即待处理完响应体后接着处理响应头
    9. return NettyWriteResponseFilter.WRITE_RESPONSE_FILTER_ORDER + 1;
    10. }
    11. @Override
    12. @SuppressWarnings("serial")
    13. public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
    14. return chain.filter(exchange).then(Mono.fromRunnable(() -> {
    15. exchange.getResponse().getHeaders().entrySet().stream()
    16. .filter(kv -> (kv.getValue() != null && kv.getValue().size() > 1))
    17. .filter(kv -> (kv.getKey().equals(HttpHeaders.ACCESS_CONTROL_ALLOW_ORIGIN)
    18. || kv.getKey().equals(HttpHeaders.ACCESS_CONTROL_ALLOW_CREDENTIALS)
    19. || kv.getKey().equals(HttpHeaders.VARY)))
    20. .forEach(kv ->
    21. {
    22. // Vary只需要去重即可
    23. if(kv.getKey().equals(HttpHeaders.VARY))
    24. kv.setValue(kv.getValue().stream().distinct().collect(Collectors.toList()));
    25. else{
    26. List value = new ArrayList<>();
    27. if(kv.getValue().contains(ANY)){ //如果包含*,则取*
    28. value.add(ANY);
    29. kv.setValue(value);
    30. }else{
    31. value.add(kv.getValue().get(0)); // 否则默认取第一个
    32. kv.setValue(value);
    33. }
    34. }
    35. });
    36. }));
    37. }
    38. }

  • 相关阅读:
    补盲激光雷达「PK」4D成像雷达,车企会作何选择?
    vue-element-admin 综合开发五:引入 echarts,封装echarts 组件
    Mathcad的数组使用
    JS 流行框架(八):ScrollReveal
    数据库实验报告(二)
    typename 的用法
    基于全同态加密的安全多方计算协议
    社区街道治安智慧监管方案,AI算法赋能城市基层精细化治理
    【PAT甲级】1028 List Sorting
    “数字+”就业生态系统演进变迁机理研探
  • 原文地址:https://blog.csdn.net/awodewen/article/details/126065480