一、全局配置自定义1、代码配置
- 方式一:让父子上下文ComponentScan重叠(强烈不建议使用)
@Configurationpublic class StockFeignConfiguration {/*** 日志级别* 通过源码可以看到日志等级有 4 种,分别是:* NONE:不输出日志 。* BASIC:只输出请求方法的 URL 和响应的状态码以及接口执行的时间 。* HEADERS:将 BASIC 信息和请求头信息输出 。* FULL:输出完整的请求信息 。*/@Beanpublic Logger.Level level(){return Logger.Level.FULL;}}
- 方式二【唯一正确的途径】: EnableFeignClients(defaultConfiguration=xxx.class)
文章插图
文章插图
2、属性配置
logging:level:com.nx: debugfeign:client:config:default:loggerLevel: full
二、 支持的配置项1、契约配置Spring Cloud 在 Feign 的基础上做了扩展,可以让 Feign 支持 Spring MVC 的注解来调用 。原生的 Feign 是不支持 Spring MVC 注解的,如果你想在 Spring Cloud 中使用原生的注解方式来定义客户端也是 可以的,通过配置契约来改变这个配置,Spring Cloud 中默认的是 SpringMvcContract 。1.1代码方式
/*** 修改契约配置,这里仅仅支持Feign原生注解* 这里是一个扩展点,如果我们想支持其他的注解,可以更改Contract的实现类 。* @return*/@Beanpublic Contract feignContract(){return new Contract.Default();}
注意:这里修改了契约配置之后,我们就只能用Fegin的原生注解文章插图
1.2 属性方式
文章插图
2、编解码Feign 中提供了自定义的编码解码器设置,同时也提供了多种编码器的实现,比如 Gson、Jaxb、Jackson 。我们可以用不同的编码解码器来处理数据的传输 。。
扩展点:Encoder & Decoder
默认我们使用:SpringEncoder和SpringDecoder
package feign.codec;public interface Encoder {void encode(Object object, Type bodyType, RequestTemplate template) throws EncodeException;}复制代码
package feign.codec;public interface Decoder {Object decode(Response response, Type type) throws IOException, DecodeException, FeignException;}复制代码
2.1 代码方式@Beanpublic Decoder decoder(){return new CustomDecoder();}@Beanpublic Encoder encoder(){return new CustomEncoder();}复制代码
2.2 属性方式feign:client:config:#想要调用的微服务的名称msb-user:encoder: com.xxx.CustomDecoderdecoder: com.xxx..CustomEncoder复制代码
3、拦截器通常我们调用的接口都是有权限控制的,很多时候可能认证的值是通过参数去传递的,还有就是通过请求头 去传递认证信息,比如 Basic 认证方式 。3.1 扩展点:
package feign;public interface RequestInterceptor {void Apply(RequestTemplate template);}复制代码
3.2 使用场景- 统一添加 header 信息;
- 对 body 中的信息做修改或替换;
package com.msb.order.interceptor;import feign.RequestInterceptor;import feign.RequestTemplate;public class FeignAuthRequestInterceptor implements RequestInterceptor {private String tokenId;public FeignAuthRequestInterceptor(String tokenId) {this.tokenId = tokenId;}@Overridepublic void apply(RequestTemplate template) {template.header("Authorization",tokenId);}}复制代码
package com.msb.order.configuration;import com.msb.order.interceptor.FeignAuthRequestInterceptor;import org.springframework.beans.factory.annotation.Value;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;@Configurationpublic class FeignConfig {@Value("${feign.tokenId}")private String tokenId;/*** 自定义拦截器* @return*/@Beanpublic FeignAuthRequestInterceptor feignAuthRequestInterceptor(){return new FeignAuthRequestInterceptor(tokenId);}}复制代码
feign:tokenId: d874528b-a9d9-46df-ad90-b92f87ccc557复制代码
在msb-stock项目中增加springmvc中的拦截器拦截器代码:
package com.msb.stock.interceptor;import JAVAx.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;@Slf4jpublic class AuthInterceptor implements HandlerInterceptor {@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {boolean flag = true;// 逻辑认证String authorization = request.getHeader("Authorization");log.info("获取的认证信息 Authorization:{}",authorization);if(StringUtils.hasText(authorization)){return true;}return false;}}复制代码
推荐阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 苹果|支付宝福利:苹果iCloud从5GB升级到50GB 免费4个月
- shiro与springSecurity
- SpringCloud中gateWay启动报错
- 怎么把icloud备份恢复到新手机 新手机如何通过icloud恢复备份
- 如何删除iCloud里面的数据 删除iCloud数据
- SpringBoot异步线程,父子线程数据传递的5种姿势
- springboot添加动态日志自动保存7天
- 大公司为什么禁止在SpringBoot项目中使用@Autowired注解?
- SpringBoot优雅的集成EhCache
- icloud上的备份是什么 icloud备份是备份的什么