From 86ce7dda397d7145a34c405f04c6b94cab6ba6c7 Mon Sep 17 00:00:00 2001 From: Lucas Shao Date: Tue, 13 Aug 2019 16:27:49 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E6=A0=BC=E5=BC=8F=E5=8C=96=E9=85=8D?= =?UTF-8?q?=E7=BD=AE=E6=96=87=E4=BB=B6.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit (cherry picked from commit fa35d4571b01c7ce108b22a6722c60d355b56fef) --- .../src/main/resources/application.yml | 128 +++++++++--------- 1 file changed, 64 insertions(+), 64 deletions(-) diff --git a/ruoyi-gateway/src/main/resources/application.yml b/ruoyi-gateway/src/main/resources/application.yml index 8df163f..61977aa 100644 --- a/ruoyi-gateway/src/main/resources/application.yml +++ b/ruoyi-gateway/src/main/resources/application.yml @@ -1,64 +1,64 @@ -server: - port: 9527 - -spring: - application: - name: ruoyi-gateway - devtools: - restart: - enabled: true - profiles: - active: dev - cloud: - config: - fail-fast: true - name: ${spring.application.name} - profile: ${spring.profiles.active} - discovery: - enabled: true - service-id: ruoyi-config - gateway: - discovery: - locator: - enabled: true - routes: - # 认证中心 - - id: ruoyi-auth - uri: lb://ruoyi-auth - predicates: - - Path=/auth/** - filters: - # 验证码处理 - - CacheRequest - - ImgCodeFilter - - StripPrefix=1 - #system 模块 - - id: ruoyi-system - uri: lb://ruoyi-system - predicates: - - Path=/system/** - filters: - # 限流配置 - - StripPrefix=1 - - name: RequestRateLimiter - args: - key-resolver: '#{@remoteAddrKeyResolver}' - redis-rate-limiter.replenishRate: 10 - redis-rate-limiter.burstCapacity: 20 - # 降级配置 - - name: Hystrix - args: - name: fallbackcmd - fallbackUri: 'forward:/fallback' - -eureka: - client: #客户端注册进eureka服务列表内 - service-url: - defaultZone: http://eureka7001.com:7001/eureka - #defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/ - instance: - instance-id: ${spring.application.name}:${server.port} - prefer-ip-address: true #访问路径可以显示IP地址 - - - +server: + port: 9527 + +spring: + application: + name: ruoyi-gateway + devtools: + restart: + enabled: true + profiles: + active: dev + cloud: + config: + fail-fast: true + name: ${spring.application.name} + profile: ${spring.profiles.active} + discovery: + enabled: true + service-id: ruoyi-config + gateway: + discovery: + locator: + enabled: true + routes: + # 认证中心 + - id: ruoyi-auth + uri: lb://ruoyi-auth + predicates: + - Path=/auth/** + filters: + # 验证码处理 + - CacheRequest + - ImgCodeFilter + - StripPrefix=1 + #system 模块 + - id: ruoyi-system + uri: lb://ruoyi-system + predicates: + - Path=/system/** + filters: + # 限流配置 + - StripPrefix=1 + - name: RequestRateLimiter + args: + key-resolver: '#{@remoteAddrKeyResolver}' + redis-rate-limiter.replenishRate: 10 + redis-rate-limiter.burstCapacity: 20 + # 降级配置 + - name: Hystrix + args: + name: fallbackcmd + fallbackUri: 'forward:/fallback' + +eureka: + client: #客户端注册进eureka服务列表内 + service-url: + defaultZone: http://eureka7001.com:7001/eureka + #defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/ + instance: + instance-id: ${spring.application.name}:${server.port} + prefer-ip-address: true #访问路径可以显示IP地址 + + + -- Gitee From 56dd594900f09abfc9c16da621a6d7bb0f7d7448 Mon Sep 17 00:00:00 2001 From: Lucas Shao Date: Tue, 13 Aug 2019 20:01:14 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E8=B7=A8=E5=9F=9F?= =?UTF-8?q?=E6=94=AF=E6=8C=81.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit (cherry picked from commit 98392f6d65f6dd7df735334fa544ce9e96dc535f) --- .../com/ruoyi/gateway/config/CorsConfig.java | 72 +++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 ruoyi-gateway/src/main/java/com/ruoyi/gateway/config/CorsConfig.java diff --git a/ruoyi-gateway/src/main/java/com/ruoyi/gateway/config/CorsConfig.java b/ruoyi-gateway/src/main/java/com/ruoyi/gateway/config/CorsConfig.java new file mode 100644 index 0000000..681ab30 --- /dev/null +++ b/ruoyi-gateway/src/main/java/com/ruoyi/gateway/config/CorsConfig.java @@ -0,0 +1,72 @@ +package com.ruoyi.gateway.config; +import org.springframework.cloud.client.discovery.DiscoveryClient; +import org.springframework.cloud.gateway.discovery.DiscoveryClientRouteDefinitionLocator; +import org.springframework.cloud.gateway.discovery.DiscoveryLocatorProperties; +import org.springframework.cloud.gateway.route.RouteDefinitionLocator; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpMethod; +import org.springframework.http.HttpStatus; +import org.springframework.http.codec.ServerCodecConfigurer; +import org.springframework.http.codec.support.DefaultServerCodecConfigurer; +import org.springframework.http.server.reactive.ServerHttpRequest; +import org.springframework.http.server.reactive.ServerHttpResponse; +import org.springframework.web.cors.reactive.CorsUtils; +import org.springframework.web.server.ServerWebExchange; +import org.springframework.web.server.WebFilter; +import org.springframework.web.server.WebFilterChain; +import reactor.core.publisher.Mono; + +/** + * 跨域允许 + * @author lucas + */ +@Configuration +public class CorsConfig { + private static final String MAX_AGE = "18000L"; + + @Bean + public WebFilter corsFilter() { + return (ServerWebExchange ctx, WebFilterChain chain) -> { + ServerHttpRequest request = ctx.getRequest(); + if (CorsUtils.isCorsRequest(request)) { + HttpHeaders requestHeaders = request.getHeaders(); + ServerHttpResponse response = ctx.getResponse(); + HttpMethod requestMethod = requestHeaders.getAccessControlRequestMethod(); + HttpHeaders headers = response.getHeaders(); + headers.add(HttpHeaders.ACCESS_CONTROL_ALLOW_ORIGIN, requestHeaders.getOrigin()); + headers.addAll(HttpHeaders.ACCESS_CONTROL_ALLOW_HEADERS, requestHeaders + .getAccessControlRequestHeaders()); + if(requestMethod != null){ + headers.add(HttpHeaders.ACCESS_CONTROL_ALLOW_METHODS, requestMethod.name()); + } + headers.add(HttpHeaders.ACCESS_CONTROL_ALLOW_CREDENTIALS, "true"); + headers.add(HttpHeaders.ACCESS_CONTROL_EXPOSE_HEADERS, "*"); + headers.add(HttpHeaders.ACCESS_CONTROL_MAX_AGE, MAX_AGE); + if (request.getMethod() == HttpMethod.OPTIONS) { + response.setStatusCode(HttpStatus.OK); + return Mono.empty(); + } + + } + return chain.filter(ctx); + }; + } + + @Bean + public ServerCodecConfigurer serverCodecConfigurer() { + return new DefaultServerCodecConfigurer(); + } + + /** + * 如果使用了注册中心(如:Eureka),进行控制则需要增加如下配置 + */ + @Bean + public RouteDefinitionLocator discoveryClientRouteDefinitionLocator( + DiscoveryClient discoveryClient, + DiscoveryLocatorProperties properties + ) { + return new DiscoveryClientRouteDefinitionLocator(discoveryClient, properties); + } +} \ No newline at end of file -- Gitee From b7b1d3c8cf7ec0bd08a5031ab669a2de211e848d Mon Sep 17 00:00:00 2001 From: Lucas Shao Date: Wed, 14 Aug 2019 09:59:44 +0800 Subject: [PATCH 3/3] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E8=B7=A8=E5=9F=9F?= =?UTF-8?q?=E6=94=AF=E6=8C=81.=20-=20=E6=A0=BC=E5=BC=8F=E5=8C=96=E9=83=A8?= =?UTF-8?q?=E5=88=86=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit (cherry picked from commit 9eece7ed718d955e2fc5267ce5a99dbff494711a) --- .../main/java/com/ruoyi/gateway/config/CorsConfig.java | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/ruoyi-gateway/src/main/java/com/ruoyi/gateway/config/CorsConfig.java b/ruoyi-gateway/src/main/java/com/ruoyi/gateway/config/CorsConfig.java index 681ab30..911d242 100644 --- a/ruoyi-gateway/src/main/java/com/ruoyi/gateway/config/CorsConfig.java +++ b/ruoyi-gateway/src/main/java/com/ruoyi/gateway/config/CorsConfig.java @@ -1,4 +1,5 @@ package com.ruoyi.gateway.config; + import org.springframework.cloud.client.discovery.DiscoveryClient; import org.springframework.cloud.gateway.discovery.DiscoveryClientRouteDefinitionLocator; import org.springframework.cloud.gateway.discovery.DiscoveryLocatorProperties; @@ -20,6 +21,7 @@ import reactor.core.publisher.Mono; /** * 跨域允许 + * * @author lucas */ @Configuration @@ -36,9 +38,11 @@ public class CorsConfig { HttpMethod requestMethod = requestHeaders.getAccessControlRequestMethod(); HttpHeaders headers = response.getHeaders(); headers.add(HttpHeaders.ACCESS_CONTROL_ALLOW_ORIGIN, requestHeaders.getOrigin()); - headers.addAll(HttpHeaders.ACCESS_CONTROL_ALLOW_HEADERS, requestHeaders - .getAccessControlRequestHeaders()); - if(requestMethod != null){ + headers.addAll( + HttpHeaders.ACCESS_CONTROL_ALLOW_HEADERS, + requestHeaders.getAccessControlRequestHeaders() + ); + if (requestMethod != null) { headers.add(HttpHeaders.ACCESS_CONTROL_ALLOW_METHODS, requestMethod.name()); } headers.add(HttpHeaders.ACCESS_CONTROL_ALLOW_CREDENTIALS, "true"); -- Gitee