springbootスプリングクラウドゲートウェイのデモ実際のアイテム

簡単な紹介

春の雲春クラウドゲートウェイはZuulゲートウェイを置き換えるために、第二世代のゲートウェイフレームワークの公式発表です。ゲートウェイトラフィックとして、マイクロサービスにシステムが制御の役割を制限し、ルーティングおよび転送機能は共通しているゲートウェイ、権利検証の非常に役割を持っています

Gitのアドレス

https://gitee.com/wqrzsy/lp-demo/tree/master/lp-springboot-gateway

もっとデモの注意を払ってください。

springbootデモ実際の項目
Javaの脳洞

プロジェクト分析

  1. プロジェクトでは、4つのプロジェクトが含まれています
  • LP-ユーレカ登録サービスセンター
  • LP-ゲートウェイゲートウェイ
  • LP-テストサービスのテストサービス
  • LP-springboot管理者モニター

スタートアップシーケンスLP-ユーレカ - > LP-ゲートウェイ - > LP-springboot管理者 - > LP-テストサービス

  1. springboot-ADMIN-LP
    春ブーツは、管理者を監視するために、視覚的なWEB UI春ブーツアクチュエータ春ブートアプリケーションの基礎に基づいて提供するのは簡単です。

詳細:

  1. LP-ゲートウェイ

クロスドメインの設定

/**
     * 设置跨域
     * @return
     */
    @Bean
    public WebFilter corsFilter() {
        return (ServerWebExchange ctx, WebFilterChain chain) -> {
            ServerHttpRequest request = ctx.getRequest();
            // 判断是否是跨域请求
            if (CorsUtils.isCorsRequest(request)) {
                HttpHeaders requestHeaders = request.getHeaders();
                ServerHttpResponse response = ctx.getResponse();
                HttpMethod requestMethod = requestHeaders.getAccessControlRequestMethod();
                HttpHeaders headers = response.getHeaders();
                // 设置跨域属性
                headers.add(HttpHeaders.ACCESS_CONTROL_ALLOW_ORIGIN, requestHeaders.getOrigin());
                headers.addAll(HttpHeaders.ACCESS_CONTROL_ALLOW_HEADERS, requestHeaders
                        .getAccessControlRequestHeaders());
                if (requestMethod != null) {
                    headers.add(HttpHeaders.ACCESS_CONTROL_ALLOW_METHODS, requestMethod.name());
                }
                headers.add(HttpHeaders.ACCESS_CONTROL_ALLOW_CREDENTIALS, "true");
                headers.add(HttpHeaders.ACCESS_CONTROL_EXPOSE_HEADERS, "*");
                headers.add(HttpHeaders.ACCESS_CONTROL_MAX_AGE, MAX_AGE);
                // 判断是否是返回
                if (request.getMethod() == HttpMethod.OPTIONS) {
                    response.setStatusCode(HttpStatus.OK);
                    return Mono.empty();
                }
            }
            return chain.filter(ctx);
        };
    }

カスタムフィルタ:ドメインフィルタ

下流の使用のための要求へのゲートウェイのドメインネームサーバを追加します。

@Component
public class RealmNameGatewayFilterFactory extends AbstractGatewayFilterFactory<Object> {

    private static final Logger logger = LoggerFactory.getLogger(RealmNameGatewayFilterFactory.class);

    @Override
    public GatewayFilter apply(Object config) {
        return (exchange, chain) -> {
            ServerHttpRequest host = exchange.getRequest().mutate().headers(httpHeaders -> {
                URI requestURI = exchange.getRequest().getURI();
                String realmName = requestURI.getHost();
                Assert.notNull(realmName, "host 为空");
                realmName = realmName + ":" + requestURI.getPort();
                httpHeaders.add("realmName", realmName);
                logger.info("headers:" + httpHeaders.toString());
            }).build();
            //将现在的request 变成 change对象
            ServerWebExchange build = exchange.mutate().request(host).build();
            return chain.filter(build);
        };
    }

}

シャント、異なるサービスガイドを構成することにより、ガイドが除去され、転送に同定します

      #配置路由
      routes:

        - id: service
          #eureka上的服务名
          uri: lb://LP-TEST-SERVICE
          predicates:
            - Path=/qa/**
          filters:
            # 去掉/qa/ 比如访问url是/qa/test 经过gateway后,后面服务拿到的就只有/test
            - StripPrefix=1
      # 设置默认过滤器,设置域名过滤器为默认过滤
      default-filters:
        - RealmName

2.テスト

http:// localhostを:8000 / QA /威張っ-ui.html

インポートデモプロジェクト

PS:このプロジェクトは、JDK11を使用して、ときに最初の主要な輸入のインストールJDK11
リファレンス:https://www.jianshu.com/p/cd0275a2f5fb

参考になりましこの記事は私にスターを付けた場合


17317532-1b938c02a0aeff​​f3.png
image.png

ます。https://www.jianshu.com/p/a624c2e4e76eで再現

おすすめ

転載: blog.csdn.net/weixin_33834679/article/details/91287973