Kaynağa Gözat

添加feign token 和内部feign标识

wuhongshuang 3 yıl önce
ebeveyn
işleme
d22d16d504

+ 5 - 1
src/main/java/com/szwl/aspect/HeadTokenInterceptor.java

@@ -1,5 +1,7 @@
 package com.szwl.aspect;
 
+import cn.hutool.core.util.StrUtil;
+import com.szwl.constant.ConfigConsts;
 import com.szwl.constant.ResponseCodesEnum;
 import com.szwl.exception.BizException;
 import com.szwl.manager.TokenManager;
@@ -24,7 +26,9 @@ public class HeadTokenInterceptor implements HandlerInterceptor {
     public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
         String uri = request.getRequestURI();
         log.info("preHandle uri:{}",uri);
-        if(tokenManager.checkToken(request)){
+        String ifFeign = request.getHeader(ConfigConsts.INNER_FEIGN);
+        boolean checkToken = tokenManager.checkToken(request);
+        if(checkToken|| StrUtil.equals("1",ifFeign)){
             return true;
         }
         throw new BizException(ResponseCodesEnum.L0006);

+ 2 - 0
src/main/java/com/szwl/constant/ConfigConsts.java

@@ -11,6 +11,8 @@ public class ConfigConsts {
      */
     public static final String AUTHORIZATION = "Authorization";
 
+    public static final String INNER_FEIGN = "innerFeign";
+
     /**
      * token时效性
      */

+ 5 - 5
src/main/java/com/szwl/controller/DemoController.java

@@ -41,11 +41,11 @@ public class DemoController {
     @Autowired
     TokenManager tokenManager;
 
-    @ApiOperation(value = "测试根据token获取用户")
-    @GetMapping("/testGetLogin")
-    public ResponseModel<?> testGetLogin() {
-        UserDetailBO userDetailBO = tokenManager.getLoginUserDetails();
-        return R.ok(userDetailBO);
+    @ApiOperation(value = "测试获取用户")
+    @GetMapping("/testGetAdmin")
+    public ResponseModel<TAdmin> testGetLogin(String id) {
+        TAdmin tAdmin = tAdminService.getById(id);
+        return R.ok(tAdmin);
     }
     @ApiOperation(value = "测试审计日志功能")
     @GetMapping("/testAuditLog")

+ 2 - 1
src/main/java/com/szwl/feign/bean/PayFeign.java

@@ -9,6 +9,7 @@ import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestParam;
 
 import java.math.BigDecimal;
 
@@ -17,7 +18,7 @@ import java.math.BigDecimal;
 public interface PayFeign {
 
     @GetMapping("/test/testPay")
-    ResponseModel<IPage<?>> testPay(String id);
+    ResponseModel<?> testPay(@RequestParam String id);
     @PostMapping("/tOrder/addOrder")
     ResponseModel<?> addOrder(@RequestBody TOrder order);
     @GetMapping("/tOrder/getOrder")

+ 20 - 0
src/main/java/com/szwl/feign/config/FeignConfig.java

@@ -0,0 +1,20 @@
+package com.szwl.feign.config;
+
+import com.szwl.feign.interceptor.FeignClientRequestHeaderInterceptor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+/**
+ * @author wuhs
+ */
+@Configuration
+@Slf4j
+public class FeignConfig {
+    @Bean
+    public FeignClientRequestHeaderInterceptor feignClientRequestHeaderInterceptor() {
+        log.info("--feign client request header interceptor reg");
+        return new FeignClientRequestHeaderInterceptor();
+    }
+
+}

+ 45 - 0
src/main/java/com/szwl/feign/interceptor/FeignClientRequestHeaderInterceptor.java

@@ -0,0 +1,45 @@
+package com.szwl.feign.interceptor;
+
+import com.szwl.constant.ConfigConsts;
+import feign.RequestInterceptor;
+import feign.RequestTemplate;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.web.context.request.RequestContextHolder;
+import org.springframework.web.context.request.ServletRequestAttributes;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.Enumeration;
+
+
+/**
+ * feign请求带上前端的token
+ * @author wuhs
+ */
+@Slf4j
+public class FeignClientRequestHeaderInterceptor implements RequestInterceptor {
+    @Value("${spring.application.name:}")
+    private String applicationName;
+
+    @Override
+    public void apply(RequestTemplate requestTemplate) {
+        //获取请求对象
+        ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
+        if (null != attributes) {
+            HttpServletRequest request = attributes.getRequest();
+            //找出当前请求头
+            Enumeration<String> headers = request.getHeaderNames();
+            //把所有请求头加入
+            while (headers.hasMoreElements()) {
+                String name = headers.nextElement();
+                if ("content-length".equalsIgnoreCase(name)) {
+                    continue;
+                }
+                String value = request.getHeader(name);
+                requestTemplate.header(name, value);
+            }
+        }
+        //添加内部跳过鉴权请求头
+        requestTemplate.header(ConfigConsts.INNER_FEIGN, "1");
+    }
+}