58b7a26ceaac2a788d6db208242b9a97e9e99541.svn-base 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. package org.jeecg.filter;
  2. import lombok.extern.slf4j.Slf4j;
  3. import org.springframework.cloud.gateway.filter.GatewayFilterChain;
  4. import org.springframework.cloud.gateway.filter.GlobalFilter;
  5. import org.springframework.core.Ordered;
  6. import org.springframework.http.server.reactive.ServerHttpRequest;
  7. import org.springframework.stereotype.Component;
  8. import org.springframework.util.StringUtils;
  9. import org.springframework.web.server.ServerWebExchange;
  10. import reactor.core.publisher.Mono;
  11. import java.util.Arrays;
  12. import java.util.stream.Collectors;
  13. import static org.springframework.cloud.gateway.support.ServerWebExchangeUtils.GATEWAY_REQUEST_URL_ATTR;
  14. import static org.springframework.cloud.gateway.support.ServerWebExchangeUtils.addOriginalRequestUrl;
  15. /**
  16. *
  17. */
  18. @Slf4j
  19. @Component
  20. public class GlobalAccessTokenFilter implements GlobalFilter, Ordered {
  21. public final static String X_ACCESS_TOKEN = "X-Access-Token";
  22. public final static String X_GATEWAY_BASE_PATH = "X_GATEWAY_BASE_PATH";
  23. @Override
  24. public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
  25. String url = exchange.getRequest().getURI().getPath();
  26. // log.info(" access url : "+ url);
  27. String scheme = exchange.getRequest().getURI().getScheme();
  28. String host = exchange.getRequest().getURI().getHost();
  29. int port = exchange.getRequest().getURI().getPort();
  30. String basePath = scheme + "://" + host + ":" + port;
  31. // log.info(" base path : "+ basePath);
  32. // 1. 重写StripPrefix(获取真实的URL)
  33. addOriginalRequestUrl(exchange, exchange.getRequest().getURI());
  34. String rawPath = exchange.getRequest().getURI().getRawPath();
  35. String newPath = "/" + Arrays.stream(StringUtils.tokenizeToStringArray(rawPath, "/")).skip(1L).collect(Collectors.joining("/"));
  36. ServerHttpRequest newRequest = exchange.getRequest().mutate().path(newPath).build();
  37. exchange.getAttributes().put(GATEWAY_REQUEST_URL_ATTR, newRequest.getURI());
  38. //将现在的request,添加当前身份
  39. ServerHttpRequest mutableReq = exchange.getRequest().mutate().header("Authorization-UserName", "").header(X_GATEWAY_BASE_PATH,basePath).build();
  40. ServerWebExchange mutableExchange = exchange.mutate().request(mutableReq).build();
  41. return chain.filter(mutableExchange);
  42. }
  43. @Override
  44. public int getOrder() {
  45. return 0;
  46. }
  47. }