From 9f88be07dde54609c6f0e37fa2a6ab01b2f64711 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=86=B7=E5=86=B7?= Date: Wed, 29 Apr 2020 11:24:03 +0800 Subject: [PATCH] =?UTF-8?q?:bug:=20Fixing=20a=20bug.=20#1133=20check=5Ftok?= =?UTF-8?q?en=20=E6=B2=A1=E6=9C=89=E5=8C=BA=E5=88=86=E7=A7=9F=E6=88=B7=20?= =?UTF-8?q?=E5=AF=BC=E8=87=B4client=E6=9F=A5=E8=AF=A2=E6=8A=A5=E7=A9=BA?= =?UTF-8?q?=E6=8C=87=E9=92=88=E5=BC=82=E5=B8=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...tion.java => PigxTenantConfiguration.java} | 13 ++++-- .../data/tenant/TenantRequestInterceptor.java | 23 +++++++++++ .../main/resources/META-INF/spring.factories | 2 +- .../PigxResourceServerAutoConfiguration.java | 41 ++++++++++--------- .../handler/RestResponseErrorHandler.java | 22 ++++++++++ .../interceptor/AccpetRequestInterceptor.java | 26 ++++++++++++ .../PigxFeignClientInterceptor.java | 2 +- .../PigxFeignConfiguration.java | 2 +- 8 files changed, 105 insertions(+), 26 deletions(-) rename pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/tenant/{PigxFeignTenantConfiguration.java => PigxTenantConfiguration.java} (80%) create mode 100644 pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/tenant/TenantRequestInterceptor.java create mode 100644 pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/handler/RestResponseErrorHandler.java create mode 100644 pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/interceptor/AccpetRequestInterceptor.java rename pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/{feign => interceptor}/PigxFeignClientInterceptor.java (98%) rename pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/{feign => interceptor}/PigxFeignConfiguration.java (97%) diff --git a/pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/tenant/PigxFeignTenantConfiguration.java b/pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/tenant/PigxTenantConfiguration.java similarity index 80% rename from pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/tenant/PigxFeignTenantConfiguration.java rename to pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/tenant/PigxTenantConfiguration.java index d5d6dbde8..49c26dac5 100644 --- a/pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/tenant/PigxFeignTenantConfiguration.java +++ b/pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/tenant/PigxTenantConfiguration.java @@ -20,16 +20,23 @@ package com.pig4cloud.pigx.common.data.tenant; import feign.RequestInterceptor; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import org.springframework.http.client.ClientHttpRequestInterceptor; /** * @author lengleng - * @date 2018/9/14 - * feign 租户信息拦截 + * @date 2020/4/29 + *

+ * 租户信息拦截 */ @Configuration -public class PigxFeignTenantConfiguration { +public class PigxTenantConfiguration { @Bean public RequestInterceptor pigxFeignTenantInterceptor() { return new PigxFeignTenantInterceptor(); } + + @Bean + public ClientHttpRequestInterceptor pigxTenantRequestInterceptor() { + return new TenantRequestInterceptor(); + } } diff --git a/pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/tenant/TenantRequestInterceptor.java b/pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/tenant/TenantRequestInterceptor.java new file mode 100644 index 000000000..daf093793 --- /dev/null +++ b/pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/tenant/TenantRequestInterceptor.java @@ -0,0 +1,23 @@ +package com.pig4cloud.pigx.common.data.tenant; + +import com.pig4cloud.pigx.common.core.constant.CommonConstants; +import org.springframework.http.HttpRequest; +import org.springframework.http.client.ClientHttpRequestExecution; +import org.springframework.http.client.ClientHttpRequestInterceptor; +import org.springframework.http.client.ClientHttpResponse; + +import java.io.IOException; + +/** + * @author lengleng + * @date 2020/4/29 + *

+ * 传递 RestTemplate 请求的租户ID + */ +public class TenantRequestInterceptor implements ClientHttpRequestInterceptor { + @Override + public ClientHttpResponse intercept(HttpRequest request, byte[] body, ClientHttpRequestExecution execution) throws IOException { + request.getHeaders().set(CommonConstants.TENANT_ID, String.valueOf(TenantContextHolder.getTenantId())); + return execution.execute(request, body); + } +} diff --git a/pigx-common/pigx-common-data/src/main/resources/META-INF/spring.factories b/pigx-common/pigx-common-data/src/main/resources/META-INF/spring.factories index fd3942d5c..92bd2f9e4 100644 --- a/pigx-common/pigx-common-data/src/main/resources/META-INF/spring.factories +++ b/pigx-common/pigx-common-data/src/main/resources/META-INF/spring.factories @@ -4,6 +4,6 @@ org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ com.pig4cloud.pigx.common.data.cache.RedisCacheAutoConfiguration,\ com.pig4cloud.pigx.common.data.tenant.PigxTenantConfigProperties,\ com.pig4cloud.pigx.common.data.tenant.TenantContextHolderFilter,\ - com.pig4cloud.pigx.common.data.tenant.PigxFeignTenantConfiguration,\ + com.pig4cloud.pigx.common.data.tenant.PigxTenantConfiguration,\ com.pig4cloud.pigx.common.data.mybatis.MybatisPlusConfiguration,\ com.pig4cloud.pigx.common.data.resolver.WebMvcConfig \ No newline at end of file diff --git a/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/component/PigxResourceServerAutoConfiguration.java b/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/component/PigxResourceServerAutoConfiguration.java index 5bc39d1be..22777f4fc 100644 --- a/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/component/PigxResourceServerAutoConfiguration.java +++ b/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/component/PigxResourceServerAutoConfiguration.java @@ -17,43 +17,44 @@ package com.pig4cloud.pigx.common.security.component; +import com.pig4cloud.pigx.common.security.handler.RestResponseErrorHandler; +import org.springframework.beans.BeansException; import org.springframework.cloud.client.loadbalancer.LoadBalanced; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Primary; -import org.springframework.http.HttpHeaders; -import org.springframework.http.HttpStatus; -import org.springframework.http.MediaType; -import org.springframework.http.client.ClientHttpResponse; -import org.springframework.web.client.DefaultResponseErrorHandler; +import org.springframework.http.client.ClientHttpRequestInterceptor; import org.springframework.web.client.RestTemplate; -import java.io.IOException; -import java.util.Collections; +import java.util.ArrayList; +import java.util.Map; /** * @author lengleng * @date 2018/11/10 */ @ComponentScan("com.pig4cloud.pigx.common.security") -public class PigxResourceServerAutoConfiguration { +public class PigxResourceServerAutoConfiguration implements ApplicationContextAware { + private ApplicationContext applicationContext; + @Bean @Primary @LoadBalanced public RestTemplate lbRestTemplate() { + // 获取上下文配置的ClientHttpRequestInterceptor 实现 + Map beansOfType = applicationContext + .getBeansOfType(ClientHttpRequestInterceptor.class); RestTemplate restTemplate = new RestTemplate(); - restTemplate.setInterceptors(Collections.singletonList((request, body, execution) -> { - request.getHeaders().set(HttpHeaders.ACCEPT, MediaType.APPLICATION_JSON_VALUE); - return execution.execute(request, body); - })); - restTemplate.setErrorHandler(new DefaultResponseErrorHandler() { - @Override - public void handleError(ClientHttpResponse response) throws IOException { - if (response.getRawStatusCode() != HttpStatus.BAD_REQUEST.value()) { - super.handleError(response); - } - } - }); + restTemplate.setInterceptors(new ArrayList<>(beansOfType.values())); + restTemplate.setErrorHandler(new RestResponseErrorHandler()); return restTemplate; } + + + @Override + public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { + this.applicationContext = applicationContext; + } } diff --git a/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/handler/RestResponseErrorHandler.java b/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/handler/RestResponseErrorHandler.java new file mode 100644 index 000000000..ebf06c30e --- /dev/null +++ b/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/handler/RestResponseErrorHandler.java @@ -0,0 +1,22 @@ +package com.pig4cloud.pigx.common.security.handler; + +import org.springframework.http.HttpStatus; +import org.springframework.http.client.ClientHttpResponse; +import org.springframework.web.client.DefaultResponseErrorHandler; + +import java.io.IOException; + +/** + * @author lengleng + * @date 2020/4/29 + *

+ * 重写默认的 响应失败处理器,400 不作为异常 + */ +public class RestResponseErrorHandler extends DefaultResponseErrorHandler { + @Override + public void handleError(ClientHttpResponse response) throws IOException { + if (response.getRawStatusCode() != HttpStatus.BAD_REQUEST.value()) { + super.handleError(response); + } + } +} diff --git a/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/interceptor/AccpetRequestInterceptor.java b/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/interceptor/AccpetRequestInterceptor.java new file mode 100644 index 000000000..340cb4cac --- /dev/null +++ b/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/interceptor/AccpetRequestInterceptor.java @@ -0,0 +1,26 @@ +package com.pig4cloud.pigx.common.security.interceptor; + +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpRequest; +import org.springframework.http.MediaType; +import org.springframework.http.client.ClientHttpRequestExecution; +import org.springframework.http.client.ClientHttpRequestInterceptor; +import org.springframework.http.client.ClientHttpResponse; +import org.springframework.stereotype.Component; + +import java.io.IOException; + +/** + * @author lengleng + * @date 2020/4/29 + *

+ * 传递accpet 请求头,避免 请求返回 XML + */ +@Component +public class AccpetRequestInterceptor implements ClientHttpRequestInterceptor { + @Override + public ClientHttpResponse intercept(HttpRequest request, byte[] body, ClientHttpRequestExecution execution) throws IOException { + request.getHeaders().set(HttpHeaders.ACCEPT, MediaType.APPLICATION_JSON_VALUE); + return execution.execute(request, body); + } +} diff --git a/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/feign/PigxFeignClientInterceptor.java b/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/interceptor/PigxFeignClientInterceptor.java similarity index 98% rename from pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/feign/PigxFeignClientInterceptor.java rename to pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/interceptor/PigxFeignClientInterceptor.java index 1aad67fc6..8b84ebfd6 100644 --- a/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/feign/PigxFeignClientInterceptor.java +++ b/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/interceptor/PigxFeignClientInterceptor.java @@ -15,7 +15,7 @@ * Author: lengleng (wangiegie@gmail.com) */ -package com.pig4cloud.pigx.common.security.feign; +package com.pig4cloud.pigx.common.security.interceptor; import cn.hutool.core.collection.CollUtil; import com.pig4cloud.pigx.common.core.constant.SecurityConstants; diff --git a/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/feign/PigxFeignConfiguration.java b/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/interceptor/PigxFeignConfiguration.java similarity index 97% rename from pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/feign/PigxFeignConfiguration.java rename to pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/interceptor/PigxFeignConfiguration.java index 55069b710..4a225f17d 100644 --- a/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/feign/PigxFeignConfiguration.java +++ b/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/interceptor/PigxFeignConfiguration.java @@ -15,7 +15,7 @@ * Author: lengleng (wangiegie@gmail.com) */ -package com.pig4cloud.pigx.common.security.feign; +package com.pig4cloud.pigx.common.security.interceptor; import feign.Feign; import feign.RequestInterceptor;