diff --git a/pom.xml b/pom.xml
index e2d34af..7017787 100644
--- a/pom.xml
+++ b/pom.xml
@@ -21,7 +21,7 @@
1.8
UTF-8
UTF-8
- Greenwich.SR1
+ Greenwich.SR2
2.7.2
diff --git a/usergw-service/src/main/java/cn/ecpark/service/usergw/biz/filters/VerifyFilter.java b/usergw-service/src/main/java/cn/ecpark/service/usergw/biz/filters/VerifyFilter.java
index dee73a7..17f2710 100644
--- a/usergw-service/src/main/java/cn/ecpark/service/usergw/biz/filters/VerifyFilter.java
+++ b/usergw-service/src/main/java/cn/ecpark/service/usergw/biz/filters/VerifyFilter.java
@@ -8,7 +8,6 @@ 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 lombok.extern.slf4j.Slf4j;
@@ -17,48 +16,48 @@ import reactor.core.publisher.Mono;
@Slf4j
@SpringBootConfiguration
@Order(-200)
-public class VerifyFilter {
+public class VerifyFilter implements GlobalFilter {
- // @Override
- // public Mono filter(ServerWebExchange exchange, GatewayFilterChain chain) {
+ @Override
+ public Mono filter(ServerWebExchange exchange, GatewayFilterChain chain) {
- // if (true)
- // return chain.filter(exchange);
- // // TODO: 添加权限
- // ServerHttpRequest request = exchange.getRequest();
- // HttpHeaders header = request.getHeaders();
+ if (true)
+ return chain.filter(exchange);
+ // TODO: 添加权限
+ ServerHttpRequest request = exchange.getRequest();
+ HttpHeaders header = request.getHeaders();
- // ServerHttpResponse response = exchange.getResponse();
- // HttpHeaders respHeader = response.getHeaders();
- // respHeader.add("token-expire", String.valueOf(System.currentTimeMillis() / 1000));
- // respHeader.add("version", "v0.0.1");
+ ServerHttpResponse response = exchange.getResponse();
+ HttpHeaders respHeader = response.getHeaders();
+ respHeader.add("token-expire", String.valueOf(System.currentTimeMillis() / 1000));
+ respHeader.add("version", "v0.0.1");
- // String token = header.getFirst("token");
- // if (token != null) {
- // //
- // if (VerifyToken(token)) {
- // log.info("request token is Verify Successed: {}", token);
- // return chain.filter(exchange);
- // }
- // log.info("request token is Verify Fail: {} != {}", token, TEST_TOKEN);
- // } else {
- // log.warn("request token is empty: {}", request.getURI());
- // }
+ String token = header.getFirst("token");
+ if (token != null) {
+ //
+ if (VerifyToken(token)) {
+ log.info("request token is Verify Successed: {}", token);
+ return chain.filter(exchange);
+ }
+ log.info("request token is Verify Fail: {} != {}", token, TEST_TOKEN);
+ } else {
+ log.warn("request token is empty: {}", request.getURI());
+ }
- // if (!response.setStatusCode(HttpStatus.UNAUTHORIZED)) {
- // log.error("if the status code has not been set because the HTTP response is already committed");
- // }
+ if (!response.setStatusCode(HttpStatus.UNAUTHORIZED)) {
+ log.error("if the status code has not been set because the HTTP response is already committed");
+ }
- // return response.setComplete();
- // }
+ return response.setComplete();
+ }
- // public static final String TEST_TOKEN = "yame";
+ public static final String TEST_TOKEN = "yame";
- // public boolean VerifyToken(String token) {
- // if (token.equals(TEST_TOKEN)) {
- // return true;
- // }
- // return false;
- // }
+ public boolean VerifyToken(String token) {
+ if (token.equals(TEST_TOKEN)) {
+ return true;
+ }
+ return false;
+ }
}
\ No newline at end of file
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 c6c9f66..2b240b7 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
@@ -1,9 +1,6 @@
package cn.ecpark.service.usergw.biz.filters.factory;
-import java.lang.annotation.Retention;
-import java.lang.reflect.Field;
import java.nio.ByteBuffer;
-import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.LinkedList;
@@ -12,28 +9,19 @@ import java.util.List;
import com.alibaba.fastjson.JSON;
import org.apache.dubbo.rpc.service.GenericService;
-import org.reactivestreams.Publisher;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.gateway.filter.GatewayFilter;
import org.springframework.cloud.gateway.filter.GatewayFilterChain;
-import org.springframework.cloud.gateway.filter.NettyWriteResponseFilter;
import org.springframework.cloud.gateway.filter.OrderedGatewayFilter;
-import org.springframework.cloud.gateway.filter.RouteToRequestUrlFilter;
import org.springframework.cloud.gateway.filter.factory.AbstractGatewayFilterFactory;
-import org.springframework.cloud.gateway.filter.factory.SetStatusGatewayFilterFactory;
-import org.springframework.cloud.gateway.handler.FilteringWebHandler;
import org.springframework.context.ApplicationContext;
import org.springframework.core.Ordered;
-import org.springframework.core.annotation.Order;
-import org.springframework.core.io.buffer.DataBuffer;
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.http.server.reactive.ServerHttpResponseDecorator;
import org.springframework.stereotype.Component;
import org.springframework.web.server.ServerWebExchange;
-import static org.springframework.cloud.gateway.support.ServerWebExchangeUtils.setResponseStatus;
import cn.ecpark.service.usergw.biz.filters.bean.GenericServicePool;
import lombok.extern.slf4j.Slf4j;
@@ -107,7 +95,7 @@ public class DubboGatewayFilterFactory extends AbstractGatewayFilterFactory {
ServerHttpRequest req = exchange.getRequest();
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 b63dcf1..e62b6a1 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
@@ -91,7 +91,7 @@ public class ConfigGateway implements RouteDefinitionLocator {
List defaultFiltersYaml = null;
Map restfulYaml = null;
Map dubboYaml = null;
-
+
Object unknown;
unknown = configYaml.get("default-filters");
if (unknown != null) {
diff --git a/usergw-service/src/main/resources/test-gateway.yaml b/usergw-service/src/main/resources/test-gateway.yaml
index 3ecb970..2e900a4 100644
--- a/usergw-service/src/main/resources/test-gateway.yaml
+++ b/usergw-service/src/main/resources/test-gateway.yaml
@@ -7,22 +7,22 @@ restful:
uri: http://httpbin.org:80/*
order: 9
predicates:
- - Path=/get
- - Header=XX, \d+
+ - Path=/get
+ - Header=XX, \d+
- id: path_route12;
uri: http://httpbin.org:80/*
order: 9
predicates:
- - Path=/get
- - Header=XX, \d+
+ - Path=/get
+ - Header=XX, \d+
- id: path_route13
uri: http://httpbin.org:80/*
order: 9
predicates:
- - Path=/get
- - Header=XX, \d+
+ - Path=/get
+ - Header=XX, \d+
# - id: redirect_to
# uri: http://localhost/test/**
# order: 11
diff --git a/usergw-service/src/main/resources/test-gateway3.yaml b/usergw-service/src/main/resources/test-gateway3.yaml
index eef4623..abc489f 100644
--- a/usergw-service/src/main/resources/test-gateway3.yaml
+++ b/usergw-service/src/main/resources/test-gateway3.yaml
@@ -1,15 +1,26 @@
-default-filters:
- - AddResponseHeader=X-Response-Default-Foo, Test-Default-Bar
-
restful: # filters 必须 有predicates uri只是预期到达的地址
routes:
- - id: redirect_to
+ - id: haha
+ uri: http://localhost:4444
+ order: 0
+ predicates:
+ - Path=/http/hello
+
+ - id: rewrite
+ uri: http://localhost:4444
+ order: 0
+ predicates:
+ - Path=/http/rewrite
+ filters:
+ - RewritePath=/http/rewrite, /http/hello
+
+ - id: xixi
uri: http://localhost:8888/http/xixi
order: 11
predicates:
- - Path=http://localhost:8888/http/xixi
+ - Path=/http/xixi
filters:
- - RedirectTo=302, http://localhost:8888/http/hello
+ - RedirectTo=302, http://localhost:4444/http/hello
dubbo:
routes:
@@ -28,6 +39,6 @@ dubbo:
interface: ocean.demo.api.IExchange
version: 1.0.0
predicates:
- - Path=/dubbo/hello
+ - Path=/dubbo/hello
\ No newline at end of file
diff --git a/usergw-service/src/test/java/cn/ecpark/service/usergw/TestHttp2DubboConfig3.java b/usergw-service/src/test/java/cn/ecpark/service/usergw/TestHttp2DubboConfig3.java
index 50ea3dc..9e9335d 100644
--- a/usergw-service/src/test/java/cn/ecpark/service/usergw/TestHttp2DubboConfig3.java
+++ b/usergw-service/src/test/java/cn/ecpark/service/usergw/TestHttp2DubboConfig3.java
@@ -1,5 +1,9 @@
package cn.ecpark.service.usergw;
+import java.util.Map;
+
+import com.alibaba.fastjson.JSON;
+
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -14,7 +18,7 @@ import reactor.netty.http.client.HttpClient.ResponseReceiver;
import reactor.netty.http.client.HttpClientResponse;
// TODO: 添加附加Dubbo Service for Test启动进程
-@SpringBootTest(classes = App.class, webEnvironment = WebEnvironment.RANDOM_PORT)
+@SpringBootTest(classes = App.class, webEnvironment = WebEnvironment.DEFINED_PORT)
@RunWith(SpringRunner.class)
@TestPropertySource(locations = { "application3.properties" })
public class TestHttp2DubboConfig3 {
@@ -43,21 +47,55 @@ public class TestHttp2DubboConfig3 {
@Test
+ @SuppressWarnings("unchecked")
public void Test3RestfulFilters() {
// Test Base Url
HttpClient client = HttpClient.create();
ResponseReceiver> receiver;
String content;
-
+
+ // Test 302
receiver = client.baseUrl("http://localhost:" + serverPort + "/http/xixi").get();
-
HttpClientResponse response = receiver.response().block();
Assert.assertNotNull(response);
Assert.assertEquals(response.status().code(), 302);
content = receiver.responseContent().asString().blockLast();
- Assert.assertNotNull(content);
- Assert.assertEquals(content, "Hello Dubbo");
+ Assert.assertNull(content);
+
+ // Test RedirectTo
+ receiver = client.baseUrl("http://localhost:" + serverPort + "/http/xixi").followRedirect(true).get();
+ response = receiver.response().block();
+ Assert.assertEquals(response.status().code(), 200);
+ content = receiver.responseContent().asString().blockLast();
+ Assert.assertEquals(content, "Http Hello");
+
+ // 测试没配置的路由
+ receiver = client.baseUrl("http://localhost:" + serverPort + "/xixi").followRedirect(true).get();
+ response = receiver.response().block();
+ Assert.assertEquals(response.status().code(), 404);
+ content = receiver.responseContent().asString().blockLast();
+ Assert.assertNotNull(content);
+
+ Object rjson = JSON.parse(content);
+ Map rmap = (Map)rjson;
+ Assert.assertEquals(rmap.get("error").toString(), "Not Found");
+
+ // 测试普通路由
+ receiver = client.baseUrl("http://localhost:" + serverPort + "/http/hello").get();
+ response = receiver.response().block();
+ Assert.assertEquals(response.status().code(), 200);
+ content = receiver.responseContent().asString().blockLast();
+ Assert.assertNotNull(content);
+
+ // 测试普通路由
+ receiver = client.baseUrl("http://localhost:" + serverPort + "/http/rewrite").get();
+ response = receiver.response().block();
+ Assert.assertEquals(response.status().code(), 200);
+ content = receiver.responseContent().asString().blockLast();
+ Assert.assertEquals(content, "Http Hello");
+
+
}
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 f63571e..654dd86 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
@@ -1,13 +1,11 @@
package cn.ecpark.service.usergw.utils;
-import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import org.apache.dubbo.config.ReferenceConfig;
import org.apache.dubbo.rpc.service.GenericService;
import org.junit.Assert;
import org.junit.Test;
-import org.springframework.boot.test.context.TestComponent;
import cn.ecpark.service.usergw.utils.Extract.GenericServiceBase;