Skip to content

Commit 00ece7e

Browse files
committed
添加读取request body的控制开关
1 parent a39834c commit 00ece7e

File tree

6 files changed

+86
-17
lines changed

6 files changed

+86
-17
lines changed

spring-cloud-bamboo/src/main/java/cn/springcloud/bamboo/autoconfig/BambooAutoConfiguration.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package cn.springcloud.bamboo.autoconfig;
22

33
import cn.springcloud.bamboo.*;
4+
import cn.springcloud.bamboo.autoconfig.properties.BambooProperties;
45
import cn.springcloud.bamboo.feign.config.BambooFeignConfiguration;
56
import cn.springcloud.bamboo.ribbon.BambooClientHttpRequestIntercptor;
67
import cn.springcloud.bamboo.ribbon.EurekaServerExtractor;
@@ -25,7 +26,7 @@
2526
* Created by saleson on 2017/11/9.
2627
*/
2728
@Configuration
28-
@EnableConfigurationProperties
29+
@EnableConfigurationProperties({BambooProperties.class})
2930
@AutoConfigureBefore({BambooFeignConfiguration.class, BambooZuulConfiguration.class})
3031
@Import(BambooWebConfiguration.class)
3132
//@RibbonClients(defaultConfiguration = {BambooExtConfigration.class})
@@ -43,13 +44,15 @@ public static class UnUseBambooIRule {
4344

4445
@Autowired
4546
private SpringClientFactory springClientFactory;
47+
@Autowired
48+
private BambooProperties bambooProperties;
4649

4750

4851
@Bean
4952
@LoadBalanced
5053
public RestTemplate restTemplate() {
5154
RestTemplate restTemplate = new RestTemplate();
52-
restTemplate.getInterceptors().add(new BambooClientHttpRequestIntercptor());
55+
restTemplate.getInterceptors().add(new BambooClientHttpRequestIntercptor(bambooProperties));
5356
return restTemplate;
5457
}
5558

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package cn.springcloud.bamboo.autoconfig.properties;
2+
3+
import org.springframework.boot.context.properties.ConfigurationProperties;
4+
5+
@ConfigurationProperties("multiversion")
6+
public class BambooProperties {
7+
8+
private BambooRequest bambooRequest = new BambooRequest();
9+
10+
public BambooRequest getBambooRequest() {
11+
return bambooRequest;
12+
}
13+
14+
public void setBambooRequest(BambooRequest bambooRequest) {
15+
this.bambooRequest = bambooRequest;
16+
}
17+
18+
public static class BambooRequest {
19+
20+
private boolean loadBody = false;
21+
22+
/**
23+
* 是否读取并加载请求的body数据
24+
*
25+
* @return
26+
*/
27+
public boolean isLoadBody() {
28+
return loadBody;
29+
}
30+
31+
public void setLoadBody(boolean loadBody) {
32+
this.loadBody = loadBody;
33+
}
34+
}
35+
36+
}

spring-cloud-bamboo/src/main/java/cn/springcloud/bamboo/feign/BambooFeignClient.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import cn.springcloud.bamboo.BambooAppContext;
44
import cn.springcloud.bamboo.BambooRequest;
55
import cn.springcloud.bamboo.ConnectPointContext;
6+
import cn.springcloud.bamboo.autoconfig.properties.BambooProperties;
67
import cn.springcloud.bamboo.utils.WebUtils;
78
import cn.springcloud.bamboo.web.RequestIpKeeper;
89
import feign.Client;
@@ -18,6 +19,7 @@
1819
public class BambooFeignClient implements Client {
1920

2021
private Client delegate;
22+
private BambooProperties bambooProperties;
2123

2224

2325
public BambooFeignClient(Client delegate) {
@@ -31,8 +33,11 @@ public Response execute(Request request, Request.Options options) throws IOExcep
3133
.serviceId(uri.getHost())
3234
.uri(uri.getPath())
3335
.ip(RequestIpKeeper.getRequestIp())
34-
.addMultiParams(WebUtils.getQueryParams(uri.getQuery()))
35-
.requestBody(request.body());
36+
.addMultiParams(WebUtils.getQueryParams(uri.getQuery()));
37+
if(bambooProperties.getBambooRequest().isLoadBody()){
38+
builder.requestBody(request.body());
39+
}
40+
3641

3742
request.headers().entrySet().forEach(entry ->{
3843
for (String v : entry.getValue()) {

spring-cloud-bamboo/src/main/java/cn/springcloud/bamboo/ribbon/BambooClientHttpRequestIntercptor.java

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import cn.springcloud.bamboo.BambooAppContext;
44
import cn.springcloud.bamboo.BambooRequest;
55
import cn.springcloud.bamboo.ConnectPointContext;
6+
import cn.springcloud.bamboo.autoconfig.properties.BambooProperties;
67
import cn.springcloud.bamboo.utils.WebUtils;
78
import cn.springcloud.bamboo.web.RequestIpKeeper;
89
import org.springframework.http.HttpRequest;
@@ -18,18 +19,29 @@
1819
* 用于@LoadBalance 标记的 RestTemplate,主要作用是用来获取request的相关信息,为后面的路由提供数据基础。
1920
*/
2021
public class BambooClientHttpRequestIntercptor implements ClientHttpRequestInterceptor {
22+
23+
private BambooProperties bambooProperties;
24+
25+
public BambooClientHttpRequestIntercptor(BambooProperties bambooProperties) {
26+
this.bambooProperties = bambooProperties;
27+
}
28+
2129
@Override
2230
public ClientHttpResponse intercept(HttpRequest request, byte[] body, ClientHttpRequestExecution execution) throws IOException {
2331

2432
URI uri = request.getURI();
25-
BambooRequest bambooRequest = BambooRequest.builder()
33+
BambooRequest.Builder bambooReqBuilder = BambooRequest.builder()
2634
.serviceId(uri.getHost())
2735
.uri(uri.getPath())
2836
.ip(RequestIpKeeper.getRequestIp())
2937
.addMultiHeaders(request.getHeaders())
30-
.addMultiParams(WebUtils.getQueryParams(uri.getQuery()))
31-
.requestBody(body)
32-
.build();
38+
.addMultiParams(WebUtils.getQueryParams(uri.getQuery()));
39+
40+
if(bambooProperties.getBambooRequest().isLoadBody()) {
41+
bambooReqBuilder.requestBody(body);
42+
}
43+
44+
BambooRequest bambooRequest = bambooReqBuilder.build();
3345

3446
ConnectPointContext connectPointContext = ConnectPointContext.builder().bambooRequest(bambooRequest).build();
3547
try {

spring-cloud-bamboo/src/main/java/cn/springcloud/bamboo/zuul/config/BambooZuulConfiguration.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,23 @@
11
package cn.springcloud.bamboo.zuul.config;
22

3+
import cn.springcloud.bamboo.autoconfig.properties.BambooProperties;
34
import cn.springcloud.bamboo.zuul.filter.BambooPostZuulFilter;
45
import cn.springcloud.bamboo.zuul.filter.BambooPreZuulFilter;
56
import com.netflix.zuul.http.ZuulServlet;
7+
import org.springframework.beans.factory.annotation.Autowired;
68
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
79
import org.springframework.context.annotation.Bean;
810
import org.springframework.context.annotation.Configuration;
911

1012
@Configuration
1113
@ConditionalOnClass(value = ZuulServlet.class)
1214
public class BambooZuulConfiguration {
15+
@Autowired
16+
private BambooProperties bambooProperties;
1317

1418
@Bean
1519
public BambooPreZuulFilter bambooPreZuulFilter(){
16-
return new BambooPreZuulFilter();
20+
return new BambooPreZuulFilter(bambooProperties);
1721
}
1822

1923
@Bean

spring-cloud-bamboo/src/main/java/cn/springcloud/bamboo/zuul/filter/BambooPreZuulFilter.java

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import cn.springcloud.bamboo.BambooAppContext;
44
import cn.springcloud.bamboo.BambooRequest;
55
import cn.springcloud.bamboo.ConnectPointContext;
6+
import cn.springcloud.bamboo.autoconfig.properties.BambooProperties;
67
import com.netflix.util.Pair;
78
import com.netflix.zuul.ZuulFilter;
89
import com.netflix.zuul.context.RequestContext;
@@ -23,6 +24,12 @@ public class BambooPreZuulFilter extends ZuulFilter {
2324

2425
private static final Logger log = LoggerFactory.getLogger(BambooPreZuulFilter.class);
2526

27+
private BambooProperties bambooProperties;
28+
29+
public BambooPreZuulFilter(BambooProperties bambooProperties) {
30+
this.bambooProperties = bambooProperties;
31+
}
32+
2633
@Override
2734
public String filterType() {
2835
return FilterConstants.PRE_TYPE;
@@ -50,14 +57,16 @@ public Object run() {
5057
.addHeaders(context.getOriginResponseHeaders().stream().collect(Collectors.toMap(Pair::first, Pair::second)));
5158
context.getOriginResponseHeaders().forEach(pair-> builder.addHeader(pair.first(), pair.second()));
5259

53-
try {
54-
BufferedReader reader = new BufferedReader(new InputStreamReader(context.getRequest().getInputStream()));
55-
byte[] reqBody = IOUtils.toByteArray(reader);
56-
builder.requestBody(reqBody);
57-
}catch (IOException e){
58-
String errorMsg = "获取request body出现异常";
59-
log.error(errorMsg, e);
60-
throw new RuntimeException(errorMsg, e);
60+
if(bambooProperties.getBambooRequest().isLoadBody()) {
61+
try {
62+
BufferedReader reader = new BufferedReader(new InputStreamReader(context.getRequest().getInputStream()));
63+
byte[] reqBody = IOUtils.toByteArray(reader);
64+
builder.requestBody(reqBody);
65+
} catch (IOException e) {
66+
String errorMsg = "获取request body出现异常";
67+
log.error(errorMsg, e);
68+
throw new RuntimeException(errorMsg, e);
69+
}
6170
}
6271

6372
ConnectPointContext connectPointContext = ConnectPointContext.builder().bambooRequest(builder.build()).build();

0 commit comments

Comments
 (0)