Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
D
discovery
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
谢捷峰
discovery
Commits
c0517136
Commit
c0517136
authored
Aug 31, 2018
by
Nepxion
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
增加RestTemplateStrategyInterceptor
parent
c2da9dfb
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
102 additions
and
19 deletions
+102
-19
discovery-plugin-strategy-starter-service/src/main/java/com/nepxion/discovery/plugin/strategy/service/aop/FeignStrategyInterceptor.java
+8
-8
discovery-plugin-strategy-starter-service/src/main/java/com/nepxion/discovery/plugin/strategy/service/aop/RestTemplateStrategyInterceptor.java
+68
-0
discovery-plugin-strategy-starter-service/src/main/java/com/nepxion/discovery/plugin/strategy/service/configuration/ServiceStrategyAutoConfiguration.java
+21
-6
discovery-plugin-strategy-starter-service/src/main/java/com/nepxion/discovery/plugin/strategy/service/constant/ServiceStrategyConstant.java
+1
-1
discovery-springcloud-example-service/src/main/resources/bootstrap.properties
+4
-4
No files found.
discovery-plugin-strategy-starter-service/src/main/java/com/nepxion/discovery/plugin/strategy/service/aop/FeignStrategyInterceptor.java
View file @
c0517136
...
...
@@ -24,13 +24,13 @@ import org.springframework.web.context.request.ServletRequestAttributes;
public
class
FeignStrategyInterceptor
implements
RequestInterceptor
{
private
static
final
Logger
LOG
=
LoggerFactory
.
getLogger
(
FeignStrategyInterceptor
.
class
);
private
String
feign
Headers
;
private
String
request
Headers
;
public
FeignStrategyInterceptor
(
String
feign
Headers
)
{
this
.
feignHeaders
=
feign
Headers
.
toLowerCase
();
public
FeignStrategyInterceptor
(
String
request
Headers
)
{
this
.
requestHeaders
=
request
Headers
.
toLowerCase
();
LOG
.
info
(
"------------- Feign Proxy Information -----------"
);
LOG
.
info
(
"Feign interceptor headers are '{}'"
,
feign
Headers
);
LOG
.
info
(
"Feign interceptor headers are '{}'"
,
request
Headers
);
LOG
.
info
(
"-------------------------------------------------"
);
}
...
...
@@ -41,18 +41,18 @@ public class FeignStrategyInterceptor implements RequestInterceptor {
return
;
}
HttpServletRequest
r
equest
=
attributes
.
getRequest
();
HttpServletRequest
previousR
equest
=
attributes
.
getRequest
();
Enumeration
<
String
>
headerNames
=
r
equest
.
getHeaderNames
();
Enumeration
<
String
>
headerNames
=
previousR
equest
.
getHeaderNames
();
if
(
headerNames
==
null
)
{
return
;
}
while
(
headerNames
.
hasMoreElements
())
{
String
headerName
=
headerNames
.
nextElement
();
String
header
=
r
equest
.
getHeader
(
headerName
);
String
header
=
previousR
equest
.
getHeader
(
headerName
);
if
(
feign
Headers
.
contains
(
headerName
.
toLowerCase
()))
{
if
(
request
Headers
.
contains
(
headerName
.
toLowerCase
()))
{
requestTemplate
.
header
(
headerName
,
header
);
}
}
...
...
discovery-plugin-strategy-starter-service/src/main/java/com/nepxion/discovery/plugin/strategy/service/aop/RestTemplateStrategyInterceptor.java
0 → 100644
View file @
c0517136
package
com
.
nepxion
.
discovery
.
plugin
.
strategy
.
service
.
aop
;
/**
* <p>Title: Nepxion Discovery</p>
* <p>Description: Nepxion Discovery</p>
* <p>Copyright: Copyright (c) 2017-2050</p>
* <p>Company: Nepxion</p>
* @author Haojun Ren
* @version 1.0
*/
import
java.io.IOException
;
import
java.util.Enumeration
;
import
javax.servlet.http.HttpServletRequest
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.http.HttpHeaders
;
import
org.springframework.http.HttpRequest
;
import
org.springframework.http.client.ClientHttpRequestExecution
;
import
org.springframework.http.client.ClientHttpRequestInterceptor
;
import
org.springframework.http.client.ClientHttpResponse
;
import
org.springframework.web.context.request.RequestContextHolder
;
import
org.springframework.web.context.request.ServletRequestAttributes
;
public
class
RestTemplateStrategyInterceptor
implements
ClientHttpRequestInterceptor
{
private
static
final
Logger
LOG
=
LoggerFactory
.
getLogger
(
RestTemplateStrategyInterceptor
.
class
);
private
String
requestHeaders
;
public
RestTemplateStrategyInterceptor
(
String
requestHeaders
)
{
this
.
requestHeaders
=
requestHeaders
.
toLowerCase
();
LOG
.
info
(
"------------- RestTemplate Proxy Information -----------"
);
LOG
.
info
(
"RestTemplate interceptor headers are '{}'"
,
requestHeaders
);
LOG
.
info
(
"-------------------------------------------------"
);
}
@Override
public
ClientHttpResponse
intercept
(
HttpRequest
request
,
byte
[]
body
,
ClientHttpRequestExecution
execution
)
throws
IOException
{
ServletRequestAttributes
attributes
=
(
ServletRequestAttributes
)
RequestContextHolder
.
getRequestAttributes
();
if
(
attributes
==
null
)
{
return
execution
.
execute
(
request
,
body
);
}
HttpServletRequest
previousRequest
=
attributes
.
getRequest
();
Enumeration
<
String
>
headerNames
=
previousRequest
.
getHeaderNames
();
if
(
headerNames
==
null
)
{
return
execution
.
execute
(
request
,
body
);
}
HttpHeaders
headers
=
request
.
getHeaders
();
while
(
headerNames
.
hasMoreElements
())
{
String
headerName
=
headerNames
.
nextElement
();
String
header
=
previousRequest
.
getHeader
(
headerName
);
if
(
requestHeaders
.
contains
(
headerName
.
toLowerCase
()))
{
headers
.
add
(
headerName
,
header
);
}
}
return
execution
.
execute
(
request
,
body
);
}
}
\ No newline at end of file
discovery-plugin-strategy-starter-service/src/main/java/com/nepxion/discovery/plugin/strategy/service/configuration/ServiceStrategyAutoConfiguration.java
View file @
c0517136
...
...
@@ -23,6 +23,7 @@ import com.nepxion.discovery.plugin.strategy.adapter.DiscoveryEnabledAdapter;
import
com.nepxion.discovery.plugin.strategy.constant.StrategyConstant
;
import
com.nepxion.discovery.plugin.strategy.service.adapter.DefaultDiscoveryEnabledAdapter
;
import
com.nepxion.discovery.plugin.strategy.service.aop.FeignStrategyInterceptor
;
import
com.nepxion.discovery.plugin.strategy.service.aop.RestTemplateStrategyInterceptor
;
import
com.nepxion.discovery.plugin.strategy.service.aop.ServiceStrategyAutoScanProxy
;
import
com.nepxion.discovery.plugin.strategy.service.aop.ServiceStrategyInterceptor
;
import
com.nepxion.discovery.plugin.strategy.service.constant.ServiceStrategyConstant
;
...
...
@@ -34,14 +35,14 @@ public class ServiceStrategyAutoConfiguration {
@Value
(
"${"
+
ServiceStrategyConstant
.
SPRING_APPLICATION_STRATEGY_SCAN_PACKAGES
+
":}"
)
private
String
scanPackages
;
@Value
(
"${"
+
ServiceStrategyConstant
.
SPRING_APPLICATION_STRATEGY_
FEIGN
_HEADERS
+
":}"
)
private
String
feign
Headers
;
@Value
(
"${"
+
ServiceStrategyConstant
.
SPRING_APPLICATION_STRATEGY_
REQUEST
_HEADERS
+
":}"
)
private
String
request
Headers
;
@Bean
@ConditionalOnProperty
(
value
=
ServiceStrategyConstant
.
SPRING_APPLICATION_STRATEGY_SCAN_PACKAGES
,
matchIfMissing
=
false
)
public
ServiceStrategyAutoScanProxy
serviceStrategyAutoScanProxy
()
{
if
(
StringUtils
.
isEmpty
(
scanPackages
))
{
throw
new
DiscoveryException
(
ServiceStrategyConstant
.
SPRING_APPLICATION_STRATEGY_SCAN_PACKAGES
+
"
can't be empty, or you can't remove it
"
);
throw
new
DiscoveryException
(
ServiceStrategyConstant
.
SPRING_APPLICATION_STRATEGY_SCAN_PACKAGES
+
"
's value can't be empty, remove it if useless
"
);
}
if
(
ServiceStrategyConstant
.
EXCLUSION_SCAN_PACKAGES
.
contains
(
scanPackages
))
{
...
...
@@ -55,7 +56,7 @@ public class ServiceStrategyAutoConfiguration {
@ConditionalOnProperty
(
value
=
ServiceStrategyConstant
.
SPRING_APPLICATION_STRATEGY_SCAN_PACKAGES
,
matchIfMissing
=
false
)
public
ServiceStrategyInterceptor
serviceStrategyInterceptor
()
{
if
(
StringUtils
.
isEmpty
(
scanPackages
))
{
throw
new
DiscoveryException
(
ServiceStrategyConstant
.
SPRING_APPLICATION_STRATEGY_SCAN_PACKAGES
+
" can't be empty,
or you can't remove it
"
);
throw
new
DiscoveryException
(
ServiceStrategyConstant
.
SPRING_APPLICATION_STRATEGY_SCAN_PACKAGES
+
" can't be empty,
remove it if useless
"
);
}
if
(
ServiceStrategyConstant
.
EXCLUSION_SCAN_PACKAGES
.
contains
(
scanPackages
))
{
...
...
@@ -66,9 +67,23 @@ public class ServiceStrategyAutoConfiguration {
}
@Bean
@ConditionalOnProperty
(
value
=
ServiceStrategyConstant
.
SPRING_APPLICATION_STRATEGY_
FEIGN
_HEADERS
,
matchIfMissing
=
false
)
@ConditionalOnProperty
(
value
=
ServiceStrategyConstant
.
SPRING_APPLICATION_STRATEGY_
REQUEST
_HEADERS
,
matchIfMissing
=
false
)
public
FeignStrategyInterceptor
feignStrategyInterceptor
()
{
return
new
FeignStrategyInterceptor
(
feignHeaders
);
if
(
StringUtils
.
isEmpty
(
requestHeaders
))
{
throw
new
DiscoveryException
(
ServiceStrategyConstant
.
SPRING_APPLICATION_STRATEGY_REQUEST_HEADERS
+
" can't be empty, remove it if useless"
);
}
return
new
FeignStrategyInterceptor
(
requestHeaders
);
}
@Bean
@ConditionalOnProperty
(
value
=
ServiceStrategyConstant
.
SPRING_APPLICATION_STRATEGY_REQUEST_HEADERS
,
matchIfMissing
=
false
)
public
RestTemplateStrategyInterceptor
restTemplateStrategyInterceptor
()
{
if
(
StringUtils
.
isEmpty
(
requestHeaders
))
{
throw
new
DiscoveryException
(
ServiceStrategyConstant
.
SPRING_APPLICATION_STRATEGY_REQUEST_HEADERS
+
" can't be empty, remove it if useless"
);
}
return
new
RestTemplateStrategyInterceptor
(
requestHeaders
);
}
@Bean
...
...
discovery-plugin-strategy-starter-service/src/main/java/com/nepxion/discovery/plugin/strategy/service/constant/ServiceStrategyConstant.java
View file @
c0517136
...
...
@@ -11,7 +11,7 @@ package com.nepxion.discovery.plugin.strategy.service.constant;
public
class
ServiceStrategyConstant
{
public
static
final
String
SPRING_APPLICATION_STRATEGY_SCAN_PACKAGES
=
"spring.application.strategy.scan.packages"
;
public
static
final
String
SPRING_APPLICATION_STRATEGY_
FEIGN_HEADERS
=
"spring.application.strategy.feign
.headers"
;
public
static
final
String
SPRING_APPLICATION_STRATEGY_
REQUEST_HEADERS
=
"spring.application.strategy.request
.headers"
;
public
static
final
String
CLASS
=
"class"
;
public
static
final
String
METHOD
=
"method"
;
public
static
final
String
PARAMETER_MAP
=
"parameterMap"
;
...
...
discovery-springcloud-example-service/src/main/resources/bootstrap.properties
View file @
c0517136
...
...
@@ -67,7 +67,7 @@ spring.boot.admin.url=http://localhost:5555
# spring.application.strategy.control.enabled=true
# 开启和关闭Ribbon默认的ZoneAvoidanceRule负载均衡策略。一旦关闭,则使用RoundRobin简单轮询负载均衡策略。缺失则默认为true
# spring.application.strategy.zone.avoidance.rule.enabled=true
# 用户自定义和编程灰度路由策略的时候,需要指定对业务Controller类的扫描路径,以便传递上下文对象。该项配置只对服务有效,对网关无效。缺失则默认关闭该功能
# 用户自定义和编程灰度路由策略的时候,
对RPC方法调用拦截的时候,
需要指定对业务Controller类的扫描路径,以便传递上下文对象。该项配置只对服务有效,对网关无效。缺失则默认关闭该功能
spring.application.strategy.scan.packages
=
com.nepxion.discovery.plugin.example.service.feign
# 用户自定义和编程灰度路由策略的时候,如果采用Feign进行Rest调用,需要把来自网关的某些Header参数传递到服务里,如果多个用“;”分隔,不允许出现空格。该项配置只对服务有效,对网关无效。缺失则默认关闭该功能
spring.application.strategy.feign.headers
=
version;region;token
\ No newline at end of file
# 用户自定义和编程灰度路由策略的时候,对REST调用拦截的时候(支持Feign或者RestTemplate调用),需要把来自外部的指定Header参数传递到服务里,如果多个用“;”分隔,不允许出现空格。该项配置只对服务有效,对网关无效。缺失则默认关闭该功能
spring.application.strategy.request.headers
=
version;region;token
\ No newline at end of file
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment