123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- package org.jeecg.starter.cloud.feign.impl;
- import feign.*;
- import feign.codec.Decoder;
- import feign.codec.Encoder;
- import lombok.extern.slf4j.Slf4j;
- import org.jeecg.common.constant.CommonConstant;
- import org.jeecg.starter.cloud.feign.IJeecgFeignService;
- import org.springframework.boot.autoconfigure.AutoConfigureBefore;
- import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
- import org.springframework.cloud.openfeign.FeignAutoConfiguration;
- import org.springframework.cloud.openfeign.FeignClientsConfiguration;
- import org.springframework.context.annotation.Import;
- import org.springframework.stereotype.Service;
- import org.springframework.web.context.request.RequestContextHolder;
- import org.springframework.web.context.request.ServletRequestAttributes;
- import javax.servlet.http.HttpServletRequest;
- @Service
- @Slf4j
- @ConditionalOnClass(Feign.class)
- @AutoConfigureBefore(FeignAutoConfiguration.class)
- @Import(FeignClientsConfiguration.class)
- public class JeecgFeignService implements IJeecgFeignService {
- //Feign 原生构造器
- Feign.Builder builder;
- //创建构造器
- public JeecgFeignService(Decoder decoder, Encoder encoder, Client client, Contract contract) {
- this.builder = Feign.builder()
- .client(client)
- .encoder(encoder)
- .decoder(decoder)
- .contract(contract);
- builder.requestInterceptor(requestTemplate -> {
- ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
- if (null != attributes) {
- HttpServletRequest request = attributes.getRequest();
- log.info("Feign request: {}", request.getRequestURI());
- // 将token信息放入header中
- String token = request.getHeader(CommonConstant.X_ACCESS_TOKEN);
- if(token==null){
- token = request.getParameter("token");
- }
- log.info("Feign request token: {}", token);
- requestTemplate.header(CommonConstant.X_ACCESS_TOKEN, token);
- }
- });
- }
- @Override
- public <T> T newInstance(Class<T> clientClass, String serviceName) {
- return builder.target(clientClass, String.format("http://%s/", serviceName));
- }
- }
|