From dc409e8bc464c0aec3d94137d6ac4ca961293560 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9C=A8=E4=B8=8B=E8=97=A4=E5=90=89=E9=83=8E?= <827908815@qq.com> Date: Sat, 24 Apr 2021 18:07:11 +0800 Subject: [PATCH] 1234 --- build.gradle | 2 + .../config/KeyResolverConfig.java | 22 +++++++++++ .../filter/AuthTokenGlobalFilter.java | 38 +++++++++++++++++++ src/main/resources/bootstrap.yml | 13 +++++-- 4 files changed, 71 insertions(+), 4 deletions(-) create mode 100644 src/main/java/com/zkcloud/gatewayserver/config/KeyResolverConfig.java create mode 100644 src/main/java/com/zkcloud/gatewayserver/filter/AuthTokenGlobalFilter.java diff --git a/build.gradle b/build.gradle index 2c65b67..8a7ad36 100644 --- a/build.gradle +++ b/build.gradle @@ -30,6 +30,8 @@ dependencies { implementation 'org.springframework.cloud:spring-cloud-starter-config' implementation 'org.springframework.cloud:spring-cloud-starter-bootstrap' implementation 'org.springframework.cloud:spring-cloud-starter-gateway' + implementation 'org.springframework.boot:spring-boot-starter-data-redis-reactive' + implementation 'org.apache.commons:commons-pool2' } dependencyManagement { diff --git a/src/main/java/com/zkcloud/gatewayserver/config/KeyResolverConfig.java b/src/main/java/com/zkcloud/gatewayserver/config/KeyResolverConfig.java new file mode 100644 index 0000000..329dacc --- /dev/null +++ b/src/main/java/com/zkcloud/gatewayserver/config/KeyResolverConfig.java @@ -0,0 +1,22 @@ +package com.zkcloud.gatewayserver.config; + +import org.springframework.cloud.gateway.filter.ratelimit.KeyResolver; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import reactor.core.publisher.Mono; + +@Configuration +public class KeyResolverConfig { + + /** + * 根据URL限流 + * + * @return KeyResolver + */ + @Bean + public KeyResolver pathKeyResolver() { + return exchange -> Mono.just(exchange.getRequest().getURI().getPath()); + } + + +} diff --git a/src/main/java/com/zkcloud/gatewayserver/filter/AuthTokenGlobalFilter.java b/src/main/java/com/zkcloud/gatewayserver/filter/AuthTokenGlobalFilter.java new file mode 100644 index 0000000..e502490 --- /dev/null +++ b/src/main/java/com/zkcloud/gatewayserver/filter/AuthTokenGlobalFilter.java @@ -0,0 +1,38 @@ +package com.zkcloud.gatewayserver.filter; + +import org.apache.commons.lang.StringUtils; +import org.springframework.cloud.gateway.filter.GatewayFilterChain; +import org.springframework.cloud.gateway.filter.GlobalFilter; +import org.springframework.core.Ordered; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpStatus; +import org.springframework.http.server.reactive.ServerHttpRequest; +import org.springframework.http.server.reactive.ServerHttpResponse; +import org.springframework.stereotype.Component; +import org.springframework.web.server.ServerWebExchange; +import reactor.core.publisher.Mono; + +@Component +public class AuthTokenGlobalFilter implements GlobalFilter, Ordered { + + @Override + public int getOrder() { + // 值越小,优先级越高 + return 0; + } + + @Override + public Mono filter(ServerWebExchange exchange, GatewayFilterChain chain) { + ServerHttpRequest request = exchange.getRequest(); + String accessToken = request.getQueryParams().getFirst("access-token"); + if (!StringUtils.equalsIgnoreCase(accessToken, "123")) { + ServerHttpResponse response = exchange.getResponse(); + String redirectUrl = "http://localhost:8001/index.html"; + response.getHeaders().set(HttpHeaders.LOCATION, redirectUrl); + response.setStatusCode(HttpStatus.SEE_OTHER); + response.getHeaders().add("Content-Type", "text/plain;charset=UTF-8"); + return response.setComplete(); + } + return chain.filter(exchange); + } +} diff --git a/src/main/resources/bootstrap.yml b/src/main/resources/bootstrap.yml index 4ebafe0..5a27fbd 100644 --- a/src/main/resources/bootstrap.yml +++ b/src/main/resources/bootstrap.yml @@ -3,6 +3,8 @@ server: spring: application: name: gateway-server + profiles: + active: test cloud: config: discovery: @@ -10,10 +12,13 @@ spring: service-id: config-center name: common label: dev - profiles: - active: test - thymeleaf: - cache: false + gateway: + discovery: + locator: + # 根据服务名转发 + enabled: true + # 服务名一律转小写 + lower-case-service-id: true eureka: instance: hostname: localhost -- GitLab