You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@linkis.apache.org by ca...@apache.org on 2022/05/05 11:34:25 UTC
[incubator-linkis] 04/05: add gateway url to request headers
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 <wp...@gmail.com>
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: commits-unsubscribe@linkis.apache.org
For additional commands, e-mail: commits-help@linkis.apache.org