0942533917f22c3db30b5df986c4b9daca913d31.svn-base 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. package org.jeecg.starter.cloud.feign.impl;
  2. import feign.*;
  3. import feign.codec.Decoder;
  4. import feign.codec.Encoder;
  5. import lombok.extern.slf4j.Slf4j;
  6. import org.jeecg.common.constant.CommonConstant;
  7. import org.jeecg.starter.cloud.feign.IJeecgFeignService;
  8. import org.springframework.boot.autoconfigure.AutoConfigureBefore;
  9. import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
  10. import org.springframework.cloud.openfeign.FeignAutoConfiguration;
  11. import org.springframework.cloud.openfeign.FeignClientsConfiguration;
  12. import org.springframework.context.annotation.Import;
  13. import org.springframework.stereotype.Service;
  14. import org.springframework.web.context.request.RequestContextHolder;
  15. import org.springframework.web.context.request.ServletRequestAttributes;
  16. import javax.servlet.http.HttpServletRequest;
  17. @Service
  18. @Slf4j
  19. @ConditionalOnClass(Feign.class)
  20. @AutoConfigureBefore(FeignAutoConfiguration.class)
  21. @Import(FeignClientsConfiguration.class)
  22. public class JeecgFeignService implements IJeecgFeignService {
  23. //Feign 原生构造器
  24. Feign.Builder builder;
  25. //创建构造器
  26. public JeecgFeignService(Decoder decoder, Encoder encoder, Client client, Contract contract) {
  27. this.builder = Feign.builder()
  28. .client(client)
  29. .encoder(encoder)
  30. .decoder(decoder)
  31. .contract(contract);
  32. builder.requestInterceptor(requestTemplate -> {
  33. ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
  34. if (null != attributes) {
  35. HttpServletRequest request = attributes.getRequest();
  36. log.info("Feign request: {}", request.getRequestURI());
  37. // 将token信息放入header中
  38. String token = request.getHeader(CommonConstant.X_ACCESS_TOKEN);
  39. if(token==null){
  40. token = request.getParameter("token");
  41. }
  42. log.info("Feign request token: {}", token);
  43. requestTemplate.header(CommonConstant.X_ACCESS_TOKEN, token);
  44. }
  45. });
  46. }
  47. @Override
  48. public <T> T newInstance(Class<T> clientClass, String serviceName) {
  49. return builder.target(clientClass, String.format("http://%s/", serviceName));
  50. }
  51. }