diff --git a/usergw-service/src/main/java/cn/ecpark/service/usergw/biz/filters/factory/DubboGatewayFilterFactory.java b/usergw-service/src/main/java/cn/ecpark/service/usergw/biz/filters/factory/DubboGatewayFilterFactory.java index 431adba..ab4826f 100644 --- a/usergw-service/src/main/java/cn/ecpark/service/usergw/biz/filters/factory/DubboGatewayFilterFactory.java +++ b/usergw-service/src/main/java/cn/ecpark/service/usergw/biz/filters/factory/DubboGatewayFilterFactory.java @@ -19,6 +19,7 @@ import org.springframework.cloud.gateway.support.DefaultServerRequest; import org.springframework.context.ApplicationContext; import org.springframework.core.io.buffer.DataBuffer; import org.springframework.core.io.buffer.DataBufferUtils; +import org.springframework.http.HttpHeaders; import org.springframework.http.HttpMethod; import org.springframework.http.codec.HttpMessageReader; import org.springframework.http.server.reactive.ServerHttpRequest; @@ -66,63 +67,58 @@ public class DubboGatewayFilterFactory extends AbstractGatewayFilterFactory modifiedBody = serverRequest.bodyToMono(String.class).map(s -> { - log.info("original text:{}", s); - /** - * do your decrypt() here and convert to String.class - * or you can change the output class to change format - */ - return "foooooooo " + s; - }); - - modifiedBody.subscribe( databuferr -> { - log.info(databuferr); - }); - - ServerHttpRequest req = exchange.getRequest(); - Flux body = req.getBody(); - body.subscribe( databuferr -> { - byte[] bytes = new byte[databuferr.readableByteCount()]; - databuferr.read(bytes); - log.warn(bytes.toString()); - }); - - body.flatMap( databuferr->{ - byte[] bytes = new byte[databuferr.readableByteCount()]; - databuferr.read(bytes); - log.warn(bytes.toString()); - return Flux.empty(); - } ); - - MultiValueMap queryParams = req.getQueryParams(); - - - // body.map( buffer -> { - // byte[] bytes = new byte[buffer.readableByteCount()]; - // buffer.read(bytes); - // DataBufferUtils.release(buffer); - // try { - // String bodyString = new String(bytes, "utf-8"); - // log.error("test body"); - // } catch (Exception e) { - // e.printStackTrace(); - // } - // return Flux.just(bytes); + // ServerRequest serverRequest = new DefaultServerRequest(exchange); + // Mono modifiedBody = serverRequest.bodyToMono(String.class).map(s -> { + // log.info("original text:{}", s); + // /** + // * do your decrypt() here and convert to String.class or you can change the + // * output class to change format + // */ + // return "12 " + s; // }); - List methodString = queryParams.get("method"); - List params = queryParams.get("params"); + // modifiedBody.subscribe(databuferr -> { + // log.info(databuferr); + // }); + + ServerHttpRequest req = exchange.getRequest(); + HttpHeaders headers = req.getHeaders(); + + List methodString = headers.get("method"); + List params = headers.get("params"); + if(methodString.size() != 0) { // special List paramTypes = mehtods.get(methodString.get(0)); - Object result = gs.$invoke(methodString.get(0), Arrays.copyOf(paramTypes.toArray(), paramTypes.size(), String[].class), params.toArray()); - if (result != null) { - ServerHttpResponse response = exchange.getResponse(); - return response.writeWith(Mono - .just(response.bufferFactory().wrap(ByteBuffer.wrap(JSON.toJSONString(result).getBytes())))); + if(paramTypes != null) { + + int paramsSize = 0; + if(params != null) { + paramsSize = params.size(); + } + + if(paramTypes.size() == paramsSize) { + Object result = null; + if(paramsSize == 0) { + result = gs.$invoke(methodString.get(0), new String[]{}, new Object[]{}); + } else { + result = gs.$invoke(methodString.get(0), Arrays.copyOf(paramTypes.toArray(), paramTypes.size(), String[].class), params.toArray()); + } + + ServerHttpResponse response = exchange.getResponse(); + if (result != null) { + return response.writeWith(Mono + .just(response.bufferFactory().wrap(ByteBuffer.wrap(JSON.toJSONString(result).getBytes())))); + } + return response.setComplete(); + + }else { + log.warn("paramTypes.size {} is not equals to params size {}", paramTypes.size(), params.size()); + } + } else { + log.warn("mehtod: {} is not exist or not allowed", methodString.get(0)); } + } else { log.info("queryParams.get(\"method\") is null"); } diff --git a/usergw-service/src/main/java/cn/ecpark/service/usergw/config/ConfigGateway.java b/usergw-service/src/main/java/cn/ecpark/service/usergw/config/ConfigGateway.java index 0d0ebaf..befc65f 100644 --- a/usergw-service/src/main/java/cn/ecpark/service/usergw/config/ConfigGateway.java +++ b/usergw-service/src/main/java/cn/ecpark/service/usergw/config/ConfigGateway.java @@ -89,7 +89,7 @@ public class ConfigGateway implements RouteDefinitionLocator { // log.error(e.toString()); // } - Map defaultYaml = (Map) configYaml.get("default"); + Map defaultYaml = (Map) configYaml.get("restful"); Map dubboYaml = (Map) configYaml.get("dubbo"); List routeList = new ArrayList(); diff --git a/usergw-service/src/main/java/cn/ecpark/service/usergw/config/ConfigSpecialFunction.java b/usergw-service/src/main/java/cn/ecpark/service/usergw/config/ConfigSpecialFunction.java index 511d4eb..18f8b25 100644 --- a/usergw-service/src/main/java/cn/ecpark/service/usergw/config/ConfigSpecialFunction.java +++ b/usergw-service/src/main/java/cn/ecpark/service/usergw/config/ConfigSpecialFunction.java @@ -1,7 +1,9 @@ package cn.ecpark.service.usergw.config; import java.lang.reflect.Method; +import java.util.ArrayList; import java.util.HashMap; +import java.util.LinkedList; import java.util.List; import java.util.function.BiConsumer; import java.util.function.Function; @@ -50,7 +52,9 @@ public class ConfigSpecialFunction { log.warn("method {} is duplicate", name); } List params = (List)cfg.get("param-types"); - + if(params == null) { + params = new LinkedList<>(); // 不用ArrayList 减少内存的使用. + } DubboGatewayFilterFactory.mehtods.put(name, params); } diff --git a/usergw-service/src/main/resources/gateway.yaml b/usergw-service/src/main/resources/gateway.yaml index ba34c45..d5202b9 100644 --- a/usergw-service/src/main/resources/gateway.yaml +++ b/usergw-service/src/main/resources/gateway.yaml @@ -2,7 +2,6 @@ restful: default-filters: - AddResponseHeader=X-Response-Default-Foo, Default-Bar routes: - - id: path_route uri: http://httpbin.org:80/* order: 9 @@ -32,16 +31,15 @@ restful: dubbo: routes: - id: test - order: 10 + order: 0 application: dubbo-exchange methods: # 如果没填就从 request拿 意味着所有接口都可以使用 - name: Say param-types: - java.lang.String - - name: Hello - + connections: 4 group: test # registry: zookeeper://127.0.0.1:2181 diff --git a/usergw-service/src/test/java/cn/ecpark/service/usergw/utils/TestExtract.java b/usergw-service/src/test/java/cn/ecpark/service/usergw/utils/TestExtract.java index 6492386..d2a2218 100644 --- a/usergw-service/src/test/java/cn/ecpark/service/usergw/utils/TestExtract.java +++ b/usergw-service/src/test/java/cn/ecpark/service/usergw/utils/TestExtract.java @@ -38,16 +38,6 @@ public class TestExtract { @Test public void TestUriQueryList() { - // String uriString = "dubbo://qu/ha?method=213&method=312"; - // QueryStringDecoder decode = new QueryStringDecoder(uriString); - // URI uri = URI.create(uriString); - // Map> parameters = decode.parameters(); - // Assert.assertNotNull(uri); - String[] _words = {"Hello", "World", "Hello"}; - Object owords = Arrays.asList(_words); - List words = (List) owords; - List a = words.stream().map(word -> ((String) word).split("e")).distinct().collect(Collectors.toList()); - - System.out.println(a); + } } \ No newline at end of file