This is an automated email from the ASF dual-hosted git repository. casion pushed a commit to branch dev-1.1.2 in repository https://gitbox.apache.org/repos/asf/incubator-linkis.git
commit be397a29cb4d0b17379e71307f474850999b31be Author: peacewong <[email protected]> AuthorDate: Thu May 5 16:21:07 2022 +0800 add gateway url to request headers --- .../linkis/gateway/security/SecurityFilter.scala | 18 +++++++-------- .../SpringCloudGatewayConfiguration.scala | 17 ++++++++++---- .../http/LinkisGatewayHttpHeadersFilter.scala} | 27 ++++++++++++++++------ 3 files changed, 40 insertions(+), 22 deletions(-) diff --git a/linkis-spring-cloud-services/linkis-service-gateway/linkis-gateway-core/src/main/scala/org/apache/linkis/gateway/security/SecurityFilter.scala b/linkis-spring-cloud-services/linkis-service-gateway/linkis-gateway-core/src/main/scala/org/apache/linkis/gateway/security/SecurityFilter.scala index d7f932356..f2cc89c58 100644 --- a/linkis-spring-cloud-services/linkis-service-gateway/linkis-gateway-core/src/main/scala/org/apache/linkis/gateway/security/SecurityFilter.scala +++ b/linkis-spring-cloud-services/linkis-service-gateway/linkis-gateway-core/src/main/scala/org/apache/linkis/gateway/security/SecurityFilter.scala @@ -17,26 +17,25 @@ package org.apache.linkis.gateway.security -import java.io.File -import java.text.DateFormat -import java.util -import java.util.concurrent.TimeUnit -import java.util.{Date, Locale} +import org.apache.commons.lang.StringUtils +import org.apache.commons.lang.exception.ExceptionUtils import org.apache.linkis.common.conf.Configuration import org.apache.linkis.common.exception.LinkisException import org.apache.linkis.common.utils.{Logging, Utils} import org.apache.linkis.gateway.config.GatewayConfiguration import org.apache.linkis.gateway.config.GatewayConfiguration._ -import org.apache.linkis.gateway.http.{GatewayContext, GatewayHttpUtils} +import org.apache.linkis.gateway.http.GatewayContext import org.apache.linkis.gateway.security.sso.SSOInterceptor import org.apache.linkis.gateway.security.token.TokenAuthentication import org.apache.linkis.server.conf.ServerConfiguration import org.apache.linkis.server.exception.{LoginExpireException, NonLoginException} import org.apache.linkis.server.{Message, validateFailed} -import org.apache.commons.lang.StringUtils -import org.apache.commons.lang.exception.ExceptionUtils -import java.util.regex.Pattern +import java.io.File +import java.text.DateFormat +import java.util +import java.util.concurrent.TimeUnit +import java.util.{Date, Locale} object SecurityFilter extends Logging { @@ -63,7 +62,6 @@ object SecurityFilter extends Logging { return false } } - GatewayHttpUtils.addGateWayUrlToRequest(gatewayContext) if (refererValidate) { //Security certification support, referer limited(安全认证支持,referer限定) val referer = gatewayContext.getRequest.getHeaders.get("Referer") diff --git a/linkis-spring-cloud-services/linkis-service-gateway/linkis-spring-cloud-gateway/src/main/scala/org/apache/linkis/gateway/springcloud/SpringCloudGatewayConfiguration.scala b/linkis-spring-cloud-services/linkis-service-gateway/linkis-spring-cloud-gateway/src/main/scala/org/apache/linkis/gateway/springcloud/SpringCloudGatewayConfiguration.scala index 444cb055b..77f3bffd4 100644 --- a/linkis-spring-cloud-services/linkis-service-gateway/linkis-spring-cloud-gateway/src/main/scala/org/apache/linkis/gateway/springcloud/SpringCloudGatewayConfiguration.scala +++ b/linkis-spring-cloud-services/linkis-service-gateway/linkis-spring-cloud-gateway/src/main/scala/org/apache/linkis/gateway/springcloud/SpringCloudGatewayConfiguration.scala @@ -23,12 +23,13 @@ import org.apache.linkis.common.utils.Logging import org.apache.linkis.gateway.config.GatewaySpringConfiguration import org.apache.linkis.gateway.parser.{DefaultGatewayParser, GatewayParser} import org.apache.linkis.gateway.route.{DefaultGatewayRouter, GatewayRouter} -import org.apache.linkis.gateway.springcloud.http.GatewayAuthorizationFilter +import org.apache.linkis.gateway.springcloud.http.{GatewayAuthorizationFilter, LinkisGatewayHttpHeadersFilter} import org.apache.linkis.gateway.springcloud.websocket.SpringCloudGatewayWebsocketFilter import org.apache.linkis.rpc.Sender import org.apache.linkis.server.conf.ServerConfiguration import org.springframework.beans.factory.annotation.Autowired import org.springframework.boot.autoconfigure.AutoConfigureAfter +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty import org.springframework.cloud.client import org.springframework.cloud.client.loadbalancer.LoadBalancerClient import org.springframework.cloud.gateway.config.{GatewayAutoConfiguration, GatewayProperties} @@ -82,10 +83,10 @@ class SpringCloudGatewayConfiguration { }).build() @Bean - def createLoadBalancerClient(springClientFactory: SpringClientFactory):RibbonLoadBalancerClient = new RibbonLoadBalancerClient(springClientFactory) { - override def getServer(serviceId: String): Server = if(isMergeModuleInstance(serviceId)) { + def createLoadBalancerClient(springClientFactory: SpringClientFactory): RibbonLoadBalancerClient = new RibbonLoadBalancerClient(springClientFactory) { + override def getServer(serviceId: String): Server = if (isMergeModuleInstance(serviceId)) { val serviceInstance = getServiceInstance(serviceId) - info("redirect to " + serviceInstance) //TODO test,wait for delete + info("redirect to " + serviceInstance) val lb = this.getLoadBalancer(serviceInstance.getApplicationName) lb.getAllServers.find(_.getHostPort == serviceInstance.getInstance).get } else super.getServer(serviceId) @@ -102,7 +103,7 @@ class SpringCloudGatewayConfiguration { serverIntrospector } - override def choose(serviceId: String, hint:Any): client.ServiceInstance = if(isMergeModuleInstance(serviceId)) { + override def choose(serviceId: String, hint: Any): client.ServiceInstance = if (isMergeModuleInstance(serviceId)) { val serviceInstance = getServiceInstance(serviceId) info("redirect to " + serviceInstance) val lb = this.getLoadBalancer(serviceInstance.getApplicationName) @@ -111,6 +112,12 @@ class SpringCloudGatewayConfiguration { } else super.choose(serviceId, hint) } + @Bean + @ConditionalOnProperty(name = Array("spring.cloud.gateway.url.enabled"), matchIfMissing = true) + def linkisGatewayHttpHeadersFilter(): LinkisGatewayHttpHeadersFilter = { + new LinkisGatewayHttpHeadersFilter() + } + } object SpringCloudGatewayConfiguration extends Logging { private val MERGE_MODULE_INSTANCE_HEADER = "merge-gw-" diff --git a/linkis-spring-cloud-services/linkis-service-gateway/linkis-gateway-core/src/main/scala/org/apache/linkis/gateway/http/GatewayHttpUtils.scala b/linkis-spring-cloud-services/linkis-service-gateway/linkis-spring-cloud-gateway/src/main/scala/org/apache/linkis/gateway/springcloud/http/LinkisGatewayHttpHeadersFilter.scala similarity index 60% rename from linkis-spring-cloud-services/linkis-service-gateway/linkis-gateway-core/src/main/scala/org/apache/linkis/gateway/http/GatewayHttpUtils.scala rename to linkis-spring-cloud-services/linkis-service-gateway/linkis-spring-cloud-gateway/src/main/scala/org/apache/linkis/gateway/springcloud/http/LinkisGatewayHttpHeadersFilter.scala index 9951ad1da..dfb0e9671 100644 --- a/linkis-spring-cloud-services/linkis-service-gateway/linkis-gateway-core/src/main/scala/org/apache/linkis/gateway/http/GatewayHttpUtils.scala +++ b/linkis-spring-cloud-services/linkis-service-gateway/linkis-spring-cloud-gateway/src/main/scala/org/apache/linkis/gateway/springcloud/http/LinkisGatewayHttpHeadersFilter.scala @@ -15,29 +15,42 @@ * limitations under the License. */ -package org.apache.linkis.gateway.http +package org.apache.linkis.gateway.springcloud.http import org.apache.commons.lang3.StringUtils import org.apache.linkis.gateway.config.GatewayConfiguration.{THIS_GATEWAY_SCHEMA, THIS_GATEWAY_URL} import org.apache.linkis.rpc.Sender +import org.springframework.cloud.gateway.filter.headers.HttpHeadersFilter +import org.springframework.core.Ordered +import org.springframework.http.HttpHeaders +import org.springframework.http.server.reactive.ServerHttpRequest +import org.springframework.web.server.ServerWebExchange - -object GatewayHttpUtils { +class LinkisGatewayHttpHeadersFilter extends HttpHeadersFilter with Ordered{ private val GATEWAY_URL = "GATEWAY_URL" - def addGateWayUrlToRequest(gatewayContext: GatewayContext): Unit = { + override def filter(input: HttpHeaders, exchange: ServerWebExchange): HttpHeaders = { + val request: ServerHttpRequest = exchange.getRequest + val updated: HttpHeaders = new HttpHeaders + val iterator = input.entrySet().iterator() + while (iterator.hasNext) { + val next = iterator.next() + updated.addAll(next.getKey, next.getValue) + } val gatewWayURL = if (StringUtils.isNotBlank(THIS_GATEWAY_URL.getValue)) { THIS_GATEWAY_URL.getValue } else { val schema = if (StringUtils.isNotBlank(THIS_GATEWAY_SCHEMA.getValue)) { THIS_GATEWAY_SCHEMA.getValue } else { - gatewayContext.getRequest.getURI.getScheme + request.getURI.getScheme } s"$schema://${Sender.getThisInstance}" } - val array = Array(gatewWayURL) - gatewayContext.getRequest.addHeader(GATEWAY_URL, array) + updated.add(GATEWAY_URL, gatewWayURL) + updated } + + override def getOrder: Int = 1 } --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
