springboot spring cloud gateway demo real items

Brief introduction

Spring Cloud Spring Cloud Gateway is the official launch of the second generation gateway framework to replace the Zuul gateway. As the gateway traffic, in micro-services system has very role of the gateway routing and forwarding features are common, rights verification, limiting the role of control

Git address

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

More demo please pay attention

springboot demo real items
java brain-dong

Project Analysis

  1. Project contains four projects
  • lp-eureka Registration Service Center
  • lp-gateway gateway
  • lp-test-service testing services
  • lp-springboot-admin monitor

Startup sequence lp-eureka -> lp-gateway -> lp-springboot-admin -> lp-test-service

  1. springboot-ADMIN-LP
    Spring Boot for monitoring the Admin, it is simple to provide on the basis of visual WEB UI Spring Boot Actuator Spring Boot application is based.

detailed:

  1. lp-gateway

Cross-domain settings

/**
     * 设置跨域
     * @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);
        };
    }

Custom filters: domain filter

Add GateWay domain name server to the Request for downstream use

@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);
        };
    }

}

Shunt, by configuring different service guide, the guide is removed and identified in forwarding

      #配置路由
      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. Test

http://localhost:8000/qa/swagger-ui.html

Import demo project

PS: This project uses JDK11, when the first major import installation JDK11
Reference: https://www.jianshu.com/p/cd0275a2f5fb

If this article helpful to you Give me a star


17317532-1b938c02a0aefff3.png
image.png

Reproduced in: https: //www.jianshu.com/p/a624c2e4e76e

Guess you like

Origin blog.csdn.net/weixin_33834679/article/details/91287973