diff --git a/pom.xml b/pom.xml index 4c6e50a..a2362e8 100644 --- a/pom.xml +++ b/pom.xml @@ -53,7 +53,7 @@ org.apache.dubbo dubbo - ${dubbo.version} + 2.7.2 diff --git a/usergw-service/src/main/java/cn/ecpark/service/usergw/biz/Filter.java b/usergw-service/src/main/java/cn/ecpark/service/usergw/biz/Filter.java deleted file mode 100644 index 061197e..0000000 --- a/usergw-service/src/main/java/cn/ecpark/service/usergw/biz/Filter.java +++ /dev/null @@ -1,12 +0,0 @@ - - - -package cn.ecpark.service.usergw.biz; - -/** - * Filter - */ -public class Filter { - - -} \ No newline at end of file diff --git a/usergw-service/src/main/java/cn/ecpark/service/usergw/biz/filters/DubboFilter.java b/usergw-service/src/main/java/cn/ecpark/service/usergw/biz/filters/DubboFilter.java new file mode 100644 index 0000000..1d6b4df --- /dev/null +++ b/usergw-service/src/main/java/cn/ecpark/service/usergw/biz/filters/DubboFilter.java @@ -0,0 +1,42 @@ +package cn.ecpark.service.usergw.biz.filters; + +import org.apache.dubbo.config.ApplicationConfig; +import org.apache.dubbo.config.ProtocolConfig; +import org.apache.dubbo.config.ReferenceConfig; +import org.apache.dubbo.config.RegistryConfig; +import org.apache.dubbo.rpc.service.GenericService; +import org.springframework.cloud.gateway.filter.GatewayFilterChain; +import org.springframework.cloud.gateway.filter.GlobalFilter; +import org.springframework.core.Ordered; +import org.springframework.stereotype.Component; +import org.springframework.web.server.ServerWebExchange; + +import reactor.core.publisher.Mono; + +@Component +public class DubboFilter implements GlobalFilter, Ordered { + + @Override + public int getOrder() { + return Ordered.LOWEST_PRECEDENCE; + } + + @Override + public Mono filter(ServerWebExchange exchange, GatewayFilterChain chain) { + exchange.getRequest(); + ReferenceConfig reference = new + ReferenceConfig(); // 该实例很重量,里面封装了所有与注册中心及服务提供方连接,请缓存 + + reference.setApplication(new ApplicationConfig("dubbo-exchange")); + // reference.setRegistry(new RegistryConfig("zookeeper://127.0.0.1:2181")); + reference.setInterface("ocean.demo.api.IExchange"); // 弱类型接口名 + reference.setVersion("1.0.0"); + reference.setGeneric(true); // 声明为泛化接口 + GenericService gs = reference.get(); + + + Object result = gs.$invoke("Hello", new String[]{}, new Object[]{}); + return null; + } + +} \ No newline at end of file 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 new file mode 100644 index 0000000..c512bd1 --- /dev/null +++ b/usergw-service/src/main/java/cn/ecpark/service/usergw/biz/filters/VerifyFilter.java @@ -0,0 +1,68 @@ +package cn.ecpark.service.usergw.biz.filters; + +import org.springframework.boot.SpringBootConfiguration; +import org.springframework.cloud.gateway.filter.GatewayFilterChain; +import org.springframework.cloud.gateway.filter.GlobalFilter; +import org.springframework.core.annotation.Order; +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; +import reactor.core.publisher.Mono; + +@Slf4j +@Component +@SpringBootConfiguration +@Order(-200) +public class VerifyFilter implements GlobalFilter { + + @Override + public Mono filter(ServerWebExchange exchange, GatewayFilterChain chain) { + + if(true) return chain.filter(exchange); + + 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"); + + 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"); + } + + return response.setComplete(); + } + + public static final String TEST_TOKEN = "yame"; + + 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/Route.java b/usergw-service/src/main/java/cn/ecpark/service/usergw/biz/routes/Route.java similarity index 84% rename from usergw-service/src/main/java/cn/ecpark/service/usergw/biz/Route.java rename to usergw-service/src/main/java/cn/ecpark/service/usergw/biz/routes/Route.java index a120301..137bdab 100644 --- a/usergw-service/src/main/java/cn/ecpark/service/usergw/biz/Route.java +++ b/usergw-service/src/main/java/cn/ecpark/service/usergw/biz/routes/Route.java @@ -1,5 +1,5 @@ -package cn.ecpark.service.usergw.biz; +package cn.ecpark.service.usergw.biz.routes; import org.springframework.cloud.gateway.route.RouteLocator; import org.springframework.cloud.gateway.route.builder.RouteLocatorBuilder; @@ -29,10 +29,7 @@ public class Route { @Bean public RouteLocator customRouteLocator(RouteLocatorBuilder builder) { - return builder.routes() - .route("path_route", r -> r.path("/about") - .uri("http://ityouknow.com")) - .build(); + return builder.routes().build(); } } \ No newline at end of file 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 1912550..274beb5 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 @@ -1,7 +1,6 @@ package cn.ecpark.service.usergw.config; import java.io.InputStream; -import java.lang.reflect.Field; import java.lang.reflect.Method; import java.net.URI; import java.util.ArrayList; @@ -10,24 +9,16 @@ import java.util.List; import java.util.Map; import org.apache.dubbo.config.ReferenceConfig; -import org.apache.dubbo.rpc.service.GenericService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.AutoConfigureAfter; import org.springframework.cloud.gateway.filter.FilterDefinition; -import org.springframework.cloud.gateway.filter.NettyWriteResponseFilter; -import org.springframework.cloud.gateway.handler.RoutePredicateHandlerMapping; import org.springframework.cloud.gateway.handler.predicate.PredicateDefinition; import org.springframework.cloud.gateway.route.RouteDefinition; import org.springframework.cloud.gateway.route.RouteDefinitionLocator; import org.springframework.context.ApplicationContext; -import org.springframework.http.MediaType; import org.springframework.stereotype.Component; import org.springframework.stereotype.Controller; -import org.springframework.util.ReflectionUtils; import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.reactive.config.WebFluxConfigurationSupport; -import org.springframework.web.reactive.result.method.AbstractHandlerMethodMapping; import org.springframework.web.reactive.result.method.RequestMappingInfo; import org.springframework.web.reactive.result.method.annotation.RequestMappingHandlerMapping; import org.yaml.snakeyaml.Yaml; @@ -36,8 +27,6 @@ import cn.ecpark.service.usergw.impl.http.Http2Dubbo; import cn.ecpark.service.usergw.utils.Convert; import lombok.extern.slf4j.Slf4j; import reactor.core.publisher.Flux; -import reactor.netty.http.server.HttpServerRequest; -import reactor.netty.http.server.HttpServerResponse; /** * ConfigGateway @@ -89,14 +78,23 @@ public class ConfigGateway implements RouteDefinitionLocator { Map configDefault = (Map) configYaml.get("default"); Map configDubbo = (Map) configYaml.get("dubbo"); - this.createHttp2Dubbo(configDubbo); - return Flux.fromIterable(this.getConfigDefault(configDefault)); + if ( configDubbo != null && !configDubbo.isEmpty()) { + this.createHttp2Dubbo(configDubbo); + } + + if( configDefault != null && !configDefault.isEmpty()) { + List result = this.getConfigDefault(configDefault); + if (result != null ) { + return Flux.fromIterable(result); + } + } } } - return null; + return Flux.empty(); // return Flux.fromIterable(it); } + @SuppressWarnings("unchecked") private List getConfigDefault(Map configDefault) { if (configDefault != null) { List RDList = new ArrayList<>(); @@ -171,14 +169,11 @@ public class ConfigGateway implements RouteDefinitionLocator { try { - // RequestMappingHandlerMapping requestMapping = (RequestMappingHandlerMapping) applicationContext - // .getBean("requestMappingHandlerMapping"); + RequestMappingHandlerMapping requestMapping = (RequestMappingHandlerMapping) applicationContext + .getBean("requestMappingHandlerMapping"); - // // Method targetMethod = ReflectionUtils.findMethod(Http2Dubbo.class, "H2DTest", - // // HttpServerRequest.class, HttpServerResponse.class); // 找到处理该路由的方法 - - // requestMapping.registerMapping(RequestMappingInfo.paths("/test/xixi").methods(RequestMethod.POST).build(), - // http2Dubbo, Http2Dubbo.class.getDeclaredMethod("H2DTest")); + requestMapping.registerMapping(RequestMappingInfo.paths("/test/xixi").methods(RequestMethod.POST).build(), + http2Dubbo, Http2Dubbo.class.getDeclaredMethod("H2DTest")); // 引用远程服务 // try { diff --git a/usergw-service/src/main/java/cn/ecpark/service/usergw/impl/http/Http2Dubbo.java b/usergw-service/src/main/java/cn/ecpark/service/usergw/impl/http/Http2Dubbo.java index 9f5b93c..46eb643 100644 --- a/usergw-service/src/main/java/cn/ecpark/service/usergw/impl/http/Http2Dubbo.java +++ b/usergw-service/src/main/java/cn/ecpark/service/usergw/impl/http/Http2Dubbo.java @@ -1,7 +1,5 @@ package cn.ecpark.service.usergw.impl.http; -import org.springframework.http.HttpStatus; -import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; @@ -24,8 +22,8 @@ public class Http2Dubbo { } - @RequestMapping("/test/fuck") + @RequestMapping("/test/request") public String fuck() { - return "fuck"; + return "request"; } } \ No newline at end of file diff --git a/usergw-service/src/main/java/cn/ecpark/service/usergw/impl/rpc/DemoHello.java b/usergw-service/src/main/java/cn/ecpark/service/usergw/impl/rpc/DemoHello.java index 2b32a97..eafc119 100644 --- a/usergw-service/src/main/java/cn/ecpark/service/usergw/impl/rpc/DemoHello.java +++ b/usergw-service/src/main/java/cn/ecpark/service/usergw/impl/rpc/DemoHello.java @@ -5,8 +5,8 @@ import org.springframework.stereotype.Component; import cn.ecpark.service.usergw.api.IDemo; -@Service(interfaceClass = IDemo.class) -@Component +// @Service(interfaceClass = IDemo.class) +// @Component public class DemoHello implements IDemo { @Override diff --git a/usergw-service/src/main/resources/application.properties b/usergw-service/src/main/resources/application.properties index a306709..a574dd0 100644 --- a/usergw-service/src/main/resources/application.properties +++ b/usergw-service/src/main/resources/application.properties @@ -2,6 +2,6 @@ spring.application.name=gateway dubbo.scan.base-packages=cn.ecpark.service.usergw.impl dubbo.protocol.name=dubbo -dubbo.protocol.port=20080 +dubbo.protocol.port=20999 dubbo.registry.address=zookeeper://127.0.0.1:2181 server.port=8888 diff --git a/usergw-service/src/main/resources/gateway.yaml b/usergw-service/src/main/resources/gateway.yaml index 4eef7c2..54d6615 100644 --- a/usergw-service/src/main/resources/gateway.yaml +++ b/usergw-service/src/main/resources/gateway.yaml @@ -5,10 +5,15 @@ default: - id: path_route uri: http://httpbin.org:80/get - order: 12 + order: 10 predicates: - # - Path=/get + - Path=/get - Header=XX, \d+ + # - id: redirect_to + # uri: http://localhost/test/** + # order: 11 + # filters: + # - RedirectTo=302, http://httpbin.org:80/get dubbo: routes: - id: test