ソースを参照

token校验逻辑优化

dengsixing 3 年 前
コミット
c83f83f6a3

+ 19 - 0
src/main/java/com/fdkankan/gateway/config/PermissionConfig.java

@@ -1,6 +1,8 @@
 package com.fdkankan.gateway.config;
 
+import cn.hutool.core.collection.CollUtil;
 import com.fdkankan.common.constant.LoginType;
+import java.util.ArrayList;
 import java.util.List;
 import lombok.Data;
 import org.springframework.boot.context.properties.ConfigurationProperties;
@@ -46,4 +48,21 @@ public class PermissionConfig {
         return null;
     }
 
+    public List<String> getAllPermissionList(){
+        List<String> list = new ArrayList<>();
+        if(CollUtil.isNotEmpty(user)){
+            list.addAll(user);
+        }
+        if(CollUtil.isNotEmpty(agent)){
+            list.addAll(agent);
+        }
+        if(CollUtil.isNotEmpty(manager)){
+            list.addAll(manager);
+        }
+        if(CollUtil.isNotEmpty(app)){
+            list.addAll(app);
+        }
+        return list;
+    }
+
 }

+ 17 - 0
src/main/java/com/fdkankan/gateway/filter/OfficialTokenFilter.java

@@ -66,6 +66,9 @@ public class OfficialTokenFilter implements GatewayFilter, Ordered {
             log.info("当前路径为" + path + ",是忽略过滤路径,直接放行!");
             return chain.filter(exchange);
         } else {
+            if(!this.neadCheckToken(path)){
+                return chain.filter(exchange);
+            }
             ErrorCode errorCode = null;
             log.info("当前路径为" + path + ",不是忽略过滤路径,开始校验!");
             // 获取当前请求中的token
@@ -120,6 +123,20 @@ public class OfficialTokenFilter implements GatewayFilter, Ordered {
         return isPermission;
     }
 
+    /**
+     * 校验是否需要校验token
+     * @param path
+     * @return
+     */
+    private boolean neadCheckToken(String path){
+        Boolean neadCheck = false;
+        List<String> permissions = permissionConfig.getAllPermissionList();
+        if(CollUtil.isNotEmpty(permissions)){
+            neadCheck = permissions.stream().anyMatch(per -> path.startsWith(per));
+        }
+        return neadCheck;
+    }
+
 
     private DataBuffer setResponseInfo(ServerHttpResponse response, ResultData resultData) {
         response.setStatusCode(HttpStatus.UNAUTHORIZED);

+ 32 - 32
src/main/java/com/fdkankan/gateway/filter/RequestGlobalFilter.java

@@ -1,32 +1,32 @@
-package com.fdkankan.gateway.filter;
-
-import com.fdkankan.gateway.decorator.ResponseDecorator;
-import org.springframework.cloud.gateway.filter.GatewayFilterChain;
-import org.springframework.cloud.gateway.filter.GlobalFilter;
-import org.springframework.core.Ordered;
-import org.springframework.stereotype.Component;
-import org.springframework.web.server.ServerWebExchange;
-import reactor.core.publisher.Mono;
-
-/**
- * <p>
- * 此过滤器用于修改响应体
- * </p>
- *
- * @author dengsixing
- * @since 2022/4/7
- **/
-@Component
-public class RequestGlobalFilter implements GlobalFilter, Ordered {
-
-    @Override
-    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
-        ResponseDecorator decorator = new ResponseDecorator(exchange.getResponse());
-        return chain.filter(exchange.mutate().response(decorator).build());
-    }
-
-    @Override
-    public int getOrder() {
-        return -99;
-    }
-}
+//package com.fdkankan.gateway.filter;
+//
+//import com.fdkankan.gateway.decorator.ResponseDecorator;
+//import org.springframework.cloud.gateway.filter.GatewayFilterChain;
+//import org.springframework.cloud.gateway.filter.GlobalFilter;
+//import org.springframework.core.Ordered;
+//import org.springframework.stereotype.Component;
+//import org.springframework.web.server.ServerWebExchange;
+//import reactor.core.publisher.Mono;
+//
+///**
+// * <p>
+// * 此过滤器用于修改响应体,用于系统报错统一返回错误信息
+// * </p>
+// *
+// * @author dengsixing
+// * @since 2022/4/7
+// **/
+//@Component
+//public class RequestGlobalFilter implements GlobalFilter, Ordered {
+//
+//    @Override
+//    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
+//        ResponseDecorator decorator = new ResponseDecorator(exchange.getResponse());
+//        return chain.filter(exchange.mutate().response(decorator).build());
+//    }
+//
+//    @Override
+//    public int getOrder() {
+//        return -99;
+//    }
+//}