Commit 59562d9c84b27ba44acdeb12441c33cd38200e07

Authored by zhangdaiscott
1 parent bfae472e

---author:scott---date:20220417-----for:【重要】重复定义的FeignConfig应该不需要了---

jeecg-boot/jeecg-boot-base/jeecg-boot-base-api/jeecg-system-cloud-api/src/main/java/org/jeecg/config/FeignConfig.java
1   -package org.jeecg.config;
2   -
3   -import java.io.IOException;
4   -import java.util.ArrayList;
5   -import java.util.Arrays;
6   -import java.util.List;
7   -import java.util.SortedMap;
8   -
9   -import javax.servlet.http.HttpServletRequest;
10   -
11   -import org.jeecg.common.config.mqtoken.UserTokenContext;
12   -import org.jeecg.common.constant.CommonConstant;
13   -import org.jeecg.common.util.DateUtils;
14   -import org.jeecg.common.util.PathMatcherUtil;
15   -import org.jeecg.config.sign.interceptor.SignAuthConfiguration;
16   -import org.jeecg.config.sign.util.HttpUtils;
17   -import org.jeecg.config.sign.util.SignUtil;
18   -import org.springframework.beans.factory.ObjectFactory;
19   -import org.springframework.boot.autoconfigure.AutoConfigureBefore;
20   -import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
21   -import org.springframework.boot.autoconfigure.http.HttpMessageConverters;
22   -import org.springframework.cloud.openfeign.FeignAutoConfiguration;
23   -import org.springframework.cloud.openfeign.support.SpringDecoder;
24   -import org.springframework.cloud.openfeign.support.SpringEncoder;
25   -import org.springframework.context.annotation.Bean;
26   -import org.springframework.context.annotation.Configuration;
27   -import org.springframework.context.annotation.Primary;
28   -import org.springframework.context.annotation.Scope;
29   -import org.springframework.http.MediaType;
30   -import org.springframework.web.context.request.RequestContextHolder;
31   -import org.springframework.web.context.request.ServletRequestAttributes;
32   -
33   -import com.alibaba.fastjson.JSON;
34   -import com.alibaba.fastjson.serializer.SerializerFeature;
35   -import com.alibaba.fastjson.support.config.FastJsonConfig;
36   -import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter;
37   -import com.alibaba.fastjson.support.springfox.SwaggerJsonSerializer;
38   -
39   -import feign.Feign;
40   -import feign.Logger;
41   -import feign.RequestInterceptor;
42   -import feign.codec.Decoder;
43   -import feign.codec.Encoder;
44   -import feign.form.spring.SpringFormEncoder;
45   -import lombok.extern.slf4j.Slf4j;
46   -
47   -/**
48   - * @Description: FeignConfig
49   - * @author: JeecgBoot
50   - */
51   -@ConditionalOnClass(Feign.class)
52   -@AutoConfigureBefore(FeignAutoConfiguration.class)
53   -@Slf4j
54   -@Configuration
55   -public class FeignConfig {
56   -
57   - /**
58   - * 设置feign header参数
59   - * 【X_ACCESS_TOKEN】【X_SIGN】【X_TIMESTAMP】
60   - * @return
61   - */
62   - @Bean
63   - public RequestInterceptor requestInterceptor() {
64   - return requestTemplate -> {
65   - ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
66   - if (null != attributes) {
67   - HttpServletRequest request = attributes.getRequest();
68   - log.debug("Feign request: {}", request.getRequestURI());
69   - // 将token信息放入header中
70   - String token = request.getHeader(CommonConstant.X_ACCESS_TOKEN);
71   - if(token==null || "".equals(token)){
72   - token = request.getParameter("token");
73   - }
74   - log.info("Feign Login Request token: {}", token);
75   - requestTemplate.header(CommonConstant.X_ACCESS_TOKEN, token);
76   - }else{
77   - //解决后台任务、MQ中调用feign接口,无会话token的问题
78   - String token = UserTokenContext.getToken();
79   - log.info("Feign No Login token: {}", token);
80   - requestTemplate.header(CommonConstant.X_ACCESS_TOKEN, token);
81   - }
82   -
83   - //================================================================================================================
84   - //针对特殊接口,进行加签验证 ——根据URL地址过滤请求 【字典表参数签名验证】
85   - if (PathMatcherUtil.matches(Arrays.asList(SignAuthConfiguration.SIGN_URL_LIST),requestTemplate.path())) {
86   - try {
87   - log.info("============================ [begin] fegin api url ============================");
88   - log.info(requestTemplate.path());
89   - log.info(requestTemplate.method());
90   - String queryLine = requestTemplate.queryLine();
91   - String questionMark="?";
92   - if(queryLine!=null && queryLine.startsWith(questionMark)){
93   - queryLine = queryLine.substring(1);
94   - }
95   - log.info(queryLine);
96   - if(requestTemplate.body()!=null){
97   - log.info(new String(requestTemplate.body()));
98   - }
99   - SortedMap<String, String> allParams = HttpUtils.getAllParams(requestTemplate.path(),queryLine,requestTemplate.body(),requestTemplate.method());
100   - String sign = SignUtil.getParamsSign(allParams);
101   - log.info(" Feign request params sign: {}",sign);
102   - log.info("============================ [end] fegin api url ============================");
103   - requestTemplate.header(CommonConstant.X_SIGN, sign);
104   - requestTemplate.header(CommonConstant.X_TIMESTAMP, DateUtils.getCurrentTimestamp().toString());
105   - } catch (IOException e) {
106   - e.printStackTrace();
107   - }
108   - }
109   - //================================================================================================================
110   - };
111   - }
112   -
113   -
114   -
115   - /**
116   - * Feign 客户端的日志记录,默认级别为NONE
117   - * Logger.Level 的具体级别如下:
118   - * NONE:不记录任何信息
119   - * BASIC:仅记录请求方法、URL以及响应状态码和执行时间
120   - * HEADERS:除了记录 BASIC级别的信息外,还会记录请求和响应的头信息
121   - * FULL:记录所有请求与响应的明细,包括头信息、请求体、元数据
122   - */
123   - @Bean
124   - Logger.Level feignLoggerLevel() {
125   - return Logger.Level.FULL;
126   - }
127   -
128   - /**
129   - * Feign支持文件上传
130   - * @param messageConverters
131   - * @return
132   - */
133   - @Bean
134   - @Primary
135   - @Scope("prototype")
136   - public Encoder multipartFormEncoder(ObjectFactory<HttpMessageConverters> messageConverters) {
137   - return new SpringFormEncoder(new SpringEncoder(messageConverters));
138   - }
139   -
140   - // update-begin--Author:sunjianlei Date:20210604 for: 给 Feign 添加 FastJson 的解析支持 ----------
141   - /**
142   - * 给 Feign 添加 FastJson 的解析支持
143   - */
144   - @Bean
145   - public Encoder feignEncoder() {
146   - return new SpringEncoder(feignHttpMessageConverter());
147   - }
148   -
149   - @Bean
150   - public Decoder feignDecoder() {
151   - return new SpringDecoder(feignHttpMessageConverter());
152   - }
153   -
154   - /**
155   - * 设置解码器为fastjson
156   - *
157   - * @return
158   - */
159   - private ObjectFactory<HttpMessageConverters> feignHttpMessageConverter() {
160   - final HttpMessageConverters httpMessageConverters = new HttpMessageConverters(this.getFastJsonConverter());
161   - return () -> httpMessageConverters;
162   - }
163   -
164   - private FastJsonHttpMessageConverter getFastJsonConverter() {
165   - FastJsonHttpMessageConverter converter = new FastJsonHttpMessageConverter();
166   -
167   - List<MediaType> supportedMediaTypes = new ArrayList<>();
168   - MediaType mediaTypeJson = MediaType.valueOf(MediaType.APPLICATION_JSON_VALUE);
169   - supportedMediaTypes.add(mediaTypeJson);
170   - converter.setSupportedMediaTypes(supportedMediaTypes);
171   - FastJsonConfig config = new FastJsonConfig();
172   - config.getSerializeConfig().put(JSON.class, new SwaggerJsonSerializer());
173   - config.setSerializerFeatures(SerializerFeature.DisableCircularReferenceDetect);
174   - converter.setFastJsonConfig(config);
175   -
176   - return converter;
177   - }
178   - // update-end--Author:sunjianlei Date:20210604 for: 给 Feign 添加 FastJson 的解析支持 ----------
179   -
180   -}
  1 +//package org.jeecg.config;
  2 +//
  3 +//import java.io.IOException;
  4 +//import java.util.ArrayList;
  5 +//import java.util.Arrays;
  6 +//import java.util.List;
  7 +//import java.util.SortedMap;
  8 +//
  9 +//import javax.servlet.http.HttpServletRequest;
  10 +//
  11 +//import org.jeecg.common.config.mqtoken.UserTokenContext;
  12 +//import org.jeecg.common.constant.CommonConstant;
  13 +//import org.jeecg.common.util.DateUtils;
  14 +//import org.jeecg.common.util.PathMatcherUtil;
  15 +//import org.jeecg.config.sign.interceptor.SignAuthConfiguration;
  16 +//import org.jeecg.config.sign.util.HttpUtils;
  17 +//import org.jeecg.config.sign.util.SignUtil;
  18 +//import org.springframework.beans.factory.ObjectFactory;
  19 +//import org.springframework.boot.autoconfigure.AutoConfigureBefore;
  20 +//import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
  21 +//import org.springframework.boot.autoconfigure.http.HttpMessageConverters;
  22 +//import org.springframework.cloud.openfeign.FeignAutoConfiguration;
  23 +//import org.springframework.cloud.openfeign.support.SpringDecoder;
  24 +//import org.springframework.cloud.openfeign.support.SpringEncoder;
  25 +//import org.springframework.context.annotation.Bean;
  26 +//import org.springframework.context.annotation.Configuration;
  27 +//import org.springframework.context.annotation.Primary;
  28 +//import org.springframework.context.annotation.Scope;
  29 +//import org.springframework.http.MediaType;
  30 +//import org.springframework.web.context.request.RequestContextHolder;
  31 +//import org.springframework.web.context.request.ServletRequestAttributes;
  32 +//
  33 +//import com.alibaba.fastjson.JSON;
  34 +//import com.alibaba.fastjson.serializer.SerializerFeature;
  35 +//import com.alibaba.fastjson.support.config.FastJsonConfig;
  36 +//import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter;
  37 +//import com.alibaba.fastjson.support.springfox.SwaggerJsonSerializer;
  38 +//
  39 +//import feign.Feign;
  40 +//import feign.Logger;
  41 +//import feign.RequestInterceptor;
  42 +//import feign.codec.Decoder;
  43 +//import feign.codec.Encoder;
  44 +//import feign.form.spring.SpringFormEncoder;
  45 +//import lombok.extern.slf4j.Slf4j;
  46 +//
  47 +///**
  48 +// * @Description: FeignConfig
  49 +// * @author: JeecgBoot
  50 +// */
  51 +//@ConditionalOnClass(Feign.class)
  52 +//@AutoConfigureBefore(FeignAutoConfiguration.class)
  53 +//@Slf4j
  54 +//@Configuration
  55 +//public class FeignConfig {
  56 +//
  57 +// /**
  58 +// * 设置feign header参数
  59 +// * 【X_ACCESS_TOKEN】【X_SIGN】【X_TIMESTAMP】
  60 +// * @return
  61 +// */
  62 +// @Bean
  63 +// public RequestInterceptor requestInterceptor() {
  64 +// return requestTemplate -> {
  65 +// ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
  66 +// if (null != attributes) {
  67 +// HttpServletRequest request = attributes.getRequest();
  68 +// log.debug("Feign request: {}", request.getRequestURI());
  69 +// // 将token信息放入header中
  70 +// String token = request.getHeader(CommonConstant.X_ACCESS_TOKEN);
  71 +// if(token==null || "".equals(token)){
  72 +// token = request.getParameter("token");
  73 +// }
  74 +// log.info("Feign Login Request token: {}", token);
  75 +// requestTemplate.header(CommonConstant.X_ACCESS_TOKEN, token);
  76 +// }else{
  77 +// //解决后台任务、MQ中调用feign接口,无会话token的问题
  78 +// String token = UserTokenContext.getToken();
  79 +// log.info("Feign No Login token: {}", token);
  80 +// requestTemplate.header(CommonConstant.X_ACCESS_TOKEN, token);
  81 +// }
  82 +//
  83 +// //================================================================================================================
  84 +// //针对特殊接口,进行加签验证 ——根据URL地址过滤请求 【字典表参数签名验证】
  85 +// if (PathMatcherUtil.matches(Arrays.asList(SignAuthConfiguration.SIGN_URL_LIST),requestTemplate.path())) {
  86 +// try {
  87 +// log.info("============================ [begin] fegin api url ============================");
  88 +// log.info(requestTemplate.path());
  89 +// log.info(requestTemplate.method());
  90 +// String queryLine = requestTemplate.queryLine();
  91 +// String questionMark="?";
  92 +// if(queryLine!=null && queryLine.startsWith(questionMark)){
  93 +// queryLine = queryLine.substring(1);
  94 +// }
  95 +// log.info(queryLine);
  96 +// if(requestTemplate.body()!=null){
  97 +// log.info(new String(requestTemplate.body()));
  98 +// }
  99 +// SortedMap<String, String> allParams = HttpUtils.getAllParams(requestTemplate.path(),queryLine,requestTemplate.body(),requestTemplate.method());
  100 +// String sign = SignUtil.getParamsSign(allParams);
  101 +// log.info(" Feign request params sign: {}",sign);
  102 +// log.info("============================ [end] fegin api url ============================");
  103 +// requestTemplate.header(CommonConstant.X_SIGN, sign);
  104 +// requestTemplate.header(CommonConstant.X_TIMESTAMP, DateUtils.getCurrentTimestamp().toString());
  105 +// } catch (IOException e) {
  106 +// e.printStackTrace();
  107 +// }
  108 +// }
  109 +// //================================================================================================================
  110 +// };
  111 +// }
  112 +//
  113 +//
  114 +//
  115 +// /**
  116 +// * Feign 客户端的日志记录,默认级别为NONE
  117 +// * Logger.Level 的具体级别如下:
  118 +// * NONE:不记录任何信息
  119 +// * BASIC:仅记录请求方法、URL以及响应状态码和执行时间
  120 +// * HEADERS:除了记录 BASIC级别的信息外,还会记录请求和响应的头信息
  121 +// * FULL:记录所有请求与响应的明细,包括头信息、请求体、元数据
  122 +// */
  123 +// @Bean
  124 +// Logger.Level feignLoggerLevel() {
  125 +// return Logger.Level.FULL;
  126 +// }
  127 +//
  128 +// /**
  129 +// * Feign支持文件上传
  130 +// * @param messageConverters
  131 +// * @return
  132 +// */
  133 +// @Bean
  134 +// @Primary
  135 +// @Scope("prototype")
  136 +// public Encoder multipartFormEncoder(ObjectFactory<HttpMessageConverters> messageConverters) {
  137 +// return new SpringFormEncoder(new SpringEncoder(messageConverters));
  138 +// }
  139 +//
  140 +// // update-begin--Author:sunjianlei Date:20210604 for: 给 Feign 添加 FastJson 的解析支持 ----------
  141 +// /**
  142 +// * 给 Feign 添加 FastJson 的解析支持
  143 +// */
  144 +// @Bean
  145 +// public Encoder feignEncoder() {
  146 +// return new SpringEncoder(feignHttpMessageConverter());
  147 +// }
  148 +//
  149 +// @Bean
  150 +// public Decoder feignDecoder() {
  151 +// return new SpringDecoder(feignHttpMessageConverter());
  152 +// }
  153 +//
  154 +// /**
  155 +// * 设置解码器为fastjson
  156 +// *
  157 +// * @return
  158 +// */
  159 +// private ObjectFactory<HttpMessageConverters> feignHttpMessageConverter() {
  160 +// final HttpMessageConverters httpMessageConverters = new HttpMessageConverters(this.getFastJsonConverter());
  161 +// return () -> httpMessageConverters;
  162 +// }
  163 +//
  164 +// private FastJsonHttpMessageConverter getFastJsonConverter() {
  165 +// FastJsonHttpMessageConverter converter = new FastJsonHttpMessageConverter();
  166 +//
  167 +// List<MediaType> supportedMediaTypes = new ArrayList<>();
  168 +// MediaType mediaTypeJson = MediaType.valueOf(MediaType.APPLICATION_JSON_VALUE);
  169 +// supportedMediaTypes.add(mediaTypeJson);
  170 +// converter.setSupportedMediaTypes(supportedMediaTypes);
  171 +// FastJsonConfig config = new FastJsonConfig();
  172 +// config.getSerializeConfig().put(JSON.class, new SwaggerJsonSerializer());
  173 +// config.setSerializerFeatures(SerializerFeature.DisableCircularReferenceDetect);
  174 +// converter.setFastJsonConfig(config);
  175 +//
  176 +// return converter;
  177 +// }
  178 +// // update-end--Author:sunjianlei Date:20210604 for: 给 Feign 添加 FastJson 的解析支持 ----------
  179 +//
  180 +//}
... ...