Commit 59562d9c84b27ba44acdeb12441c33cd38200e07
1 parent
bfae472e
---author:scott---date:20220417-----for:【重要】重复定义的FeignConfig应该不需要了---
Showing
1 changed file
with
180 additions
and
180 deletions
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 | +//} | |
... | ... |