|
@@ -1,86 +1,86 @@
|
|
|
-package com.leanwo.gateway.util;
|
|
|
|
|
-
|
|
|
|
|
-import java.util.ArrayList;
|
|
|
|
|
-import java.util.Date;
|
|
|
|
|
-import java.util.List;
|
|
|
|
|
-import java.util.UUID;
|
|
|
|
|
-
|
|
|
|
|
-import org.slf4j.Logger;
|
|
|
|
|
-import org.slf4j.LoggerFactory;
|
|
|
|
|
-import org.springframework.beans.BeansException;
|
|
|
|
|
-import org.springframework.beans.factory.ObjectFactory;
|
|
|
|
|
-import org.springframework.beans.factory.annotation.Value;
|
|
|
|
|
-import org.springframework.boot.autoconfigure.http.HttpMessageConverters;
|
|
|
|
|
-import org.springframework.cloud.openfeign.support.ResponseEntityDecoder;
|
|
|
|
|
-import org.springframework.cloud.openfeign.support.SpringDecoder;
|
|
|
|
|
-import org.springframework.context.annotation.Bean;
|
|
|
|
|
-import org.springframework.context.annotation.Configuration;
|
|
|
|
|
-import org.springframework.http.MediaType;
|
|
|
|
|
-import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
|
|
|
|
|
-
|
|
|
|
|
-import com.auth0.jwt.JWT;
|
|
|
|
|
-import com.auth0.jwt.algorithms.Algorithm;
|
|
|
|
|
-import com.auth0.jwt.exceptions.JWTCreationException;
|
|
|
|
|
-import com.leanwo.gateway.exception.AuthorizeException;
|
|
|
|
|
-import com.leanwo.gateway.exception.TokenException;
|
|
|
|
|
-
|
|
|
|
|
-import feign.RequestInterceptor;
|
|
|
|
|
-import feign.RequestTemplate;
|
|
|
|
|
-import feign.codec.Decoder;
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
-/**
|
|
|
|
|
- * Feign配置 使用FeignClient进行服务间调用,传递headers信息
|
|
|
|
|
- */
|
|
|
|
|
-@Configuration
|
|
|
|
|
-public class FeignConfig implements RequestInterceptor {
|
|
|
|
|
-
|
|
|
|
|
- private final static Logger logger = LoggerFactory.getLogger(FeignConfig.class.getName());
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
- @Override
|
|
|
|
|
- public void apply(RequestTemplate requestTemplate) {
|
|
|
|
|
- LoginContext loginContext = LoginContextUtil.getLoginContext();
|
|
|
|
|
-
|
|
|
|
|
- if (loginContext == null) {
|
|
|
|
|
- throw new AuthorizeException("您没有权限调用业务服务器。");
|
|
|
|
|
- }
|
|
|
|
|
- String token = loginContext.getToken();
|
|
|
|
|
- logger.info("jwtToken:" + token);
|
|
|
|
|
- if (StringUtil.isNotEmpty(token)) {
|
|
|
|
|
- // header里面添加jwt-token
|
|
|
|
|
- requestTemplate.header("token", loginContext.getToken());
|
|
|
|
|
- requestTemplate.header("account", loginContext.getAccountId().toString());
|
|
|
|
|
- logger.info("header:" + requestTemplate.headers());
|
|
|
|
|
- }
|
|
|
|
|
- if(loginContext.getAccountId() != null) {
|
|
|
|
|
- requestTemplate.header("account", loginContext.getAccountId().toString());
|
|
|
|
|
- logger.info("account:" + loginContext.getAccountId());
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
- @Bean
|
|
|
|
|
- public Decoder feignDecoder() {
|
|
|
|
|
- return new ResponseEntityDecoder(new SpringDecoder(feignHttpMessageConverter()));
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- public ObjectFactory<HttpMessageConverters> feignHttpMessageConverter() {
|
|
|
|
|
- final HttpMessageConverters httpMessageConverters = new HttpMessageConverters(new GateWayMappingJackson2HttpMessageConverter());
|
|
|
|
|
- return new ObjectFactory<HttpMessageConverters>() {
|
|
|
|
|
- @Override
|
|
|
|
|
- public HttpMessageConverters getObject() throws BeansException {
|
|
|
|
|
- return httpMessageConverters;
|
|
|
|
|
- }
|
|
|
|
|
- };
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- public class GateWayMappingJackson2HttpMessageConverter extends MappingJackson2HttpMessageConverter {
|
|
|
|
|
- GateWayMappingJackson2HttpMessageConverter(){
|
|
|
|
|
- List<MediaType> mediaTypes = new ArrayList<>();
|
|
|
|
|
- mediaTypes.add(MediaType.valueOf(MediaType.TEXT_HTML_VALUE + ";charset=UTF-8"));
|
|
|
|
|
- setSupportedMediaTypes(mediaTypes);
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
|
|
+package com.leanwo.gateway.util;
|
|
|
|
|
+
|
|
|
|
|
+import java.util.ArrayList;
|
|
|
|
|
+import java.util.Date;
|
|
|
|
|
+import java.util.List;
|
|
|
|
|
+import java.util.UUID;
|
|
|
|
|
+
|
|
|
|
|
+import org.slf4j.Logger;
|
|
|
|
|
+import org.slf4j.LoggerFactory;
|
|
|
|
|
+import org.springframework.beans.BeansException;
|
|
|
|
|
+import org.springframework.beans.factory.ObjectFactory;
|
|
|
|
|
+import org.springframework.beans.factory.annotation.Value;
|
|
|
|
|
+import org.springframework.boot.autoconfigure.http.HttpMessageConverters;
|
|
|
|
|
+import org.springframework.cloud.openfeign.support.ResponseEntityDecoder;
|
|
|
|
|
+import org.springframework.cloud.openfeign.support.SpringDecoder;
|
|
|
|
|
+import org.springframework.context.annotation.Bean;
|
|
|
|
|
+import org.springframework.context.annotation.Configuration;
|
|
|
|
|
+import org.springframework.http.MediaType;
|
|
|
|
|
+import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
|
|
|
|
|
+
|
|
|
|
|
+import com.auth0.jwt.JWT;
|
|
|
|
|
+import com.auth0.jwt.algorithms.Algorithm;
|
|
|
|
|
+import com.auth0.jwt.exceptions.JWTCreationException;
|
|
|
|
|
+import com.leanwo.gateway.exception.AuthorizeException;
|
|
|
|
|
+import com.leanwo.gateway.exception.TokenException;
|
|
|
|
|
+
|
|
|
|
|
+import feign.RequestInterceptor;
|
|
|
|
|
+import feign.RequestTemplate;
|
|
|
|
|
+import feign.codec.Decoder;
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+/**
|
|
|
|
|
+ * Feign配置 使用FeignClient进行服务间调用,传递headers信息
|
|
|
|
|
+ */
|
|
|
|
|
+@Configuration
|
|
|
|
|
+public class FeignConfig implements RequestInterceptor {
|
|
|
|
|
+
|
|
|
|
|
+ private final static Logger logger = LoggerFactory.getLogger(FeignConfig.class.getName());
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public void apply(RequestTemplate requestTemplate) {
|
|
|
|
|
+ LoginContext loginContext = LoginContextUtil.getLoginContext();
|
|
|
|
|
+
|
|
|
|
|
+ if (loginContext == null) {
|
|
|
|
|
+ throw new AuthorizeException("您没有权限调用业务服务器。");
|
|
|
|
|
+ }
|
|
|
|
|
+ String token = TokenUtil.getToken();
|
|
|
|
|
+ logger.info("jwtToken:" + token);
|
|
|
|
|
+ if (StringUtil.isNotEmpty(token)) {
|
|
|
|
|
+ // header里面添加jwt-token
|
|
|
|
|
+ requestTemplate.header("token", token);
|
|
|
|
|
+ requestTemplate.header("account", loginContext.getAccountId().toString());
|
|
|
|
|
+ logger.info("header:" + requestTemplate.headers());
|
|
|
|
|
+ }
|
|
|
|
|
+ if(loginContext.getAccountId() != null) {
|
|
|
|
|
+ requestTemplate.header("account", loginContext.getAccountId().toString());
|
|
|
|
|
+ logger.info("account:" + loginContext.getAccountId());
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ @Bean
|
|
|
|
|
+ public Decoder feignDecoder() {
|
|
|
|
|
+ return new ResponseEntityDecoder(new SpringDecoder(feignHttpMessageConverter()));
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ public ObjectFactory<HttpMessageConverters> feignHttpMessageConverter() {
|
|
|
|
|
+ final HttpMessageConverters httpMessageConverters = new HttpMessageConverters(new GateWayMappingJackson2HttpMessageConverter());
|
|
|
|
|
+ return new ObjectFactory<HttpMessageConverters>() {
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public HttpMessageConverters getObject() throws BeansException {
|
|
|
|
|
+ return httpMessageConverters;
|
|
|
|
|
+ }
|
|
|
|
|
+ };
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ public class GateWayMappingJackson2HttpMessageConverter extends MappingJackson2HttpMessageConverter {
|
|
|
|
|
+ GateWayMappingJackson2HttpMessageConverter(){
|
|
|
|
|
+ List<MediaType> mediaTypes = new ArrayList<>();
|
|
|
|
|
+ mediaTypes.add(MediaType.valueOf(MediaType.TEXT_HTML_VALUE + ";charset=UTF-8"));
|
|
|
|
|
+ setSupportedMediaTypes(mediaTypes);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|