FeignConfig.java 3.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. package jnpf;
  2. import feign.Logger;
  3. import feign.RequestInterceptor;
  4. import feign.RequestTemplate;
  5. import jnpf.base.UserInfo;
  6. import jnpf.constant.GlobalConst;
  7. import jnpf.consts.AuthConsts;
  8. import jnpf.properties.SecurityProperties;
  9. import jnpf.util.Constants;
  10. import jnpf.util.ServletUtil;
  11. import jnpf.util.UserProvider;
  12. import jnpf.utils.FeignHolder;
  13. import org.springframework.beans.factory.annotation.Autowired;
  14. import org.springframework.context.annotation.Bean;
  15. import org.springframework.context.annotation.Configuration;
  16. import jakarta.servlet.http.HttpServletRequest;
  17. import java.util.Map;
  18. /**
  19. *
  20. * @author JNPF开发平台组
  21. * @version V3.1.0
  22. * @copyright 引迈信息技术有限公司
  23. * @date 2021/3/16 10:51
  24. */
  25. @Configuration
  26. public class FeignConfig implements RequestInterceptor {
  27. @Autowired
  28. private SecurityProperties securityProperties;
  29. @Override
  30. public void apply(RequestTemplate template) {
  31. //添加token
  32. Map<String, String> headers = FeignHolder.get();
  33. String token = null;
  34. if(headers != null){
  35. //通过FeignHolder调用
  36. template.header("User-Agent", headers.get("user-agent"));
  37. template.header(Constants.AUTHORIZATION, headers.get(Constants.AUTHORIZATION));
  38. template.header("X-Real-IP", headers.get("x-real-ip"));
  39. template.header("X-Forwarded-For", headers.get("x-forwarded-for"));
  40. template.header("App-Code", headers.get("App-Code"));
  41. template.header("Jnpf-Origin", headers.get("Jnpf-Origin"));
  42. /*headers.entrySet().forEach((k)->{
  43. template.header(k.getKey(), k.getValue());
  44. });*/
  45. }else {
  46. //先获取当前本地缓存中UserInfo的TOKEN
  47. //适配临时切换用户
  48. UserInfo userInfo = UserProvider.getLocalLoginUser();
  49. if(userInfo != null && userInfo.getToken() != null){
  50. token = userInfo.getToken();
  51. template.header(Constants.AUTHORIZATION, token);
  52. }
  53. //Web环境直接调用
  54. HttpServletRequest request = ServletUtil.getRequest();
  55. if (request != null) {
  56. if(token == null) {
  57. template.header(Constants.AUTHORIZATION, request.getHeader(Constants.AUTHORIZATION));
  58. }
  59. template.header("User-Agent", request.getHeader("User-Agent"));
  60. template.header("X-Real-IP", request.getHeader("X-Real-IP"));
  61. template.header("X-Forwarded-For", request.getHeader("X-Forwarded-For"));
  62. template.header("App-Code", request.getHeader("App-Code"));
  63. template.header("Jnpf-Origin", request.getHeader("Jnpf-Origin"));
  64. }
  65. }
  66. if(securityProperties.isEnableInnerAuth() || securityProperties.isEnablePreAuth()) {
  67. template.header(AuthConsts.INNER_TOKEN_KEY, UserProvider.getInnerAuthToken());
  68. }
  69. template.header(GlobalConst.HEADER_HOST, ServletUtil.getRequestHost());
  70. }
  71. /**
  72. * Openfeign调用日志
  73. * NONE,BASIC,HEADERS,FULL共有四种等级
  74. * @return
  75. */
  76. @Bean
  77. Logger.Level feignLoggerLeave(){
  78. return Logger.Level.FULL;
  79. }
  80. }