|
@@ -3,11 +3,16 @@ package com.diagbot.filter;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
import org.springframework.cloud.gateway.filter.GatewayFilterChain;
|
|
|
import org.springframework.cloud.gateway.filter.GlobalFilter;
|
|
|
+import org.springframework.cloud.gateway.support.ServerWebExchangeUtils;
|
|
|
import org.springframework.context.annotation.Configuration;
|
|
|
import org.springframework.http.server.reactive.ServerHttpRequest;
|
|
|
import org.springframework.web.server.ServerWebExchange;
|
|
|
import reactor.core.publisher.Mono;
|
|
|
|
|
|
+import java.net.URI;
|
|
|
+import java.util.Iterator;
|
|
|
+import java.util.LinkedHashSet;
|
|
|
+
|
|
|
/**
|
|
|
* @Description: 全局过滤器
|
|
|
* @author: gaodm
|
|
@@ -16,12 +21,29 @@ import reactor.core.publisher.Mono;
|
|
|
@Configuration
|
|
|
@Slf4j
|
|
|
public class GlobalGatewayFilter implements GlobalFilter {
|
|
|
+ private static final String GATE_WAY_PREFIX = "/api";
|
|
|
+
|
|
|
@Override
|
|
|
- public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
|
|
|
+ public Mono<Void> filter(ServerWebExchange serverWebExchange, GatewayFilterChain gatewayFilterChain) {
|
|
|
log.info("check token and url permission....");
|
|
|
- ServerHttpRequest.Builder builder = exchange.getRequest().mutate();
|
|
|
+ LinkedHashSet requiredAttribute = serverWebExchange.getRequiredAttribute(ServerWebExchangeUtils.GATEWAY_ORIGINAL_REQUEST_URL_ATTR);
|
|
|
+ ServerHttpRequest request = serverWebExchange.getRequest();
|
|
|
+ String requestUri = request.getPath().pathWithinApplication().value();
|
|
|
+ if (requiredAttribute != null) {
|
|
|
+ Iterator<URI> iterator = requiredAttribute.iterator();
|
|
|
+ while (iterator.hasNext()){
|
|
|
+ URI next = iterator.next();
|
|
|
+ if(next.getPath().startsWith(GATE_WAY_PREFIX)){
|
|
|
+ requestUri = next.getPath().substring(GATE_WAY_PREFIX.length());
|
|
|
+// requestUri = requestUri.substring(requestUri.indexOf('/', 2));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ log.info(requestUri);
|
|
|
+ //
|
|
|
+ ServerHttpRequest.Builder builder = serverWebExchange.getRequest().mutate();
|
|
|
builder.header("Authorization","Authorization Bearer token");
|
|
|
- chain.filter(exchange.mutate().request(builder.build()).build());
|
|
|
- return chain.filter(exchange.mutate().request(builder.build()).build());
|
|
|
+ gatewayFilterChain.filter(serverWebExchange.mutate().request(builder.build()).build());
|
|
|
+ return gatewayFilterChain.filter(serverWebExchange.mutate().request(builder.build()).build());
|
|
|
}
|
|
|
}
|