|
|
@@ -1,52 +0,0 @@
|
|
|
-package com.leanwo.gateway;
|
|
|
-
|
|
|
-import java.net.URI;
|
|
|
-
|
|
|
-import org.apache.commons.lang.StringUtils;
|
|
|
-import org.springframework.cloud.gateway.filter.GatewayFilterChain;
|
|
|
-import org.springframework.cloud.gateway.filter.GlobalFilter;
|
|
|
-import org.springframework.cloud.gateway.filter.LoadBalancerClientFilter;
|
|
|
-import org.springframework.cloud.gateway.support.ServerWebExchangeUtils;
|
|
|
-import org.springframework.core.Ordered;
|
|
|
-import org.springframework.stereotype.Component;
|
|
|
-import org.springframework.web.server.ServerWebExchange;
|
|
|
-import org.springframework.web.util.UriComponentsBuilder;
|
|
|
-
|
|
|
-import reactor.core.publisher.Mono;
|
|
|
-
|
|
|
-@Component
|
|
|
-public class HttpSchemeFilter implements GlobalFilter, Ordered{
|
|
|
- @Override
|
|
|
- public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
|
|
|
- //获取uri
|
|
|
- Object uriObj = exchange.getAttributes().get(ServerWebExchangeUtils.GATEWAY_REQUEST_URL_ATTR);
|
|
|
- if (uriObj instanceof URI) {
|
|
|
- URI uri = (URI) uriObj;
|
|
|
- //替换为http
|
|
|
- uri = upgradeConnection(uri, "http");
|
|
|
- exchange.getAttributes().put(ServerWebExchangeUtils.GATEWAY_REQUEST_URL_ATTR, uri);
|
|
|
- }
|
|
|
-
|
|
|
- return chain.filter(exchange);
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 更新scheme
|
|
|
- *
|
|
|
- * @param uri
|
|
|
- * @param scheme
|
|
|
- * @return
|
|
|
- */
|
|
|
- private URI upgradeConnection(URI uri, String scheme) {
|
|
|
- UriComponentsBuilder builder = UriComponentsBuilder.fromUri(uri).scheme(scheme);
|
|
|
- if (!StringUtils.isEmpty(uri.getRawQuery())) {
|
|
|
- builder.replaceQueryParam(uri.getRawQuery().replace("+", "%20"));
|
|
|
- }
|
|
|
- return builder.build(true).toUri();
|
|
|
- }
|
|
|
-
|
|
|
- @Override
|
|
|
- public int getOrder() {
|
|
|
- return LoadBalancerClientFilter.LOAD_BALANCER_CLIENT_FILTER_ORDER + 1;
|
|
|
- }
|
|
|
-}
|