Explorar el Código

接入springboot-admin

dengsixing hace 3 años
padre
commit
55c70cc007

+ 6 - 0
pom.xml

@@ -109,6 +109,12 @@
             <version>1.3.6</version>
         </dependency>
 
+        <dependency>
+            <groupId>de.codecentric</groupId>
+            <artifactId>spring-boot-admin-client</artifactId>
+            <version>2.3.1</version>
+        </dependency>
+
     </dependencies>
 
     <dependencyManagement>

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

@@ -0,0 +1,49 @@
+package com.fdkankan.gateway.config;
+
+import com.fdkankan.common.constant.LoginType;
+import java.util.List;
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+/**
+ * <p>
+ * TODO
+ * </p>
+ *
+ * @author dengsixing
+ * @since 2022/3/29
+ **/
+@Component
+@Data
+@ConfigurationProperties(prefix = "permission")
+public class PermissionConfig {
+
+    private List<String> ignore;
+
+    private List<String> user;
+
+    private List<String> agent;
+
+    private List<String> manager;
+
+    private List<String> app;
+
+    public List<String> getPermissionsByLoginType(String type){
+
+        LoginType loginType = LoginType.get(type);
+        switch (loginType){
+            case USER:
+                return this.user;
+            case AGENT:
+                return this.agent;
+            case MANAGER:
+                return this.manager;
+            case APP:
+                return this.app;
+        }
+
+        return null;
+    }
+
+}

+ 23 - 50
src/main/java/com/fdkankan/gateway/filter/OfficialTokenFilter.java

@@ -1,10 +1,13 @@
 package com.fdkankan.gateway.filter;
 
+import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.json.JSONUtil;
+import com.fdkankan.common.constant.LoginType;
 import com.fdkankan.common.constant.ServerCode;
 import com.fdkankan.common.response.ResultData;
 import com.fdkankan.common.util.JwtUtil;
+import com.fdkankan.gateway.config.PermissionConfig;
 import com.fdkankan.redis.util.RedisUtil;
 import io.jsonwebtoken.Claims;
 import lombok.extern.slf4j.Slf4j;
@@ -35,48 +38,14 @@ public class OfficialTokenFilter implements GatewayFilter, Ordered {
 
     private static final String TOKEN = "token";
 
-    private static final Map<String, List<String>> permissionMap = new HashMap<>();
-
-    private static final List<String> ignoreAuthUrls = new ArrayList<>();
-
     @Value("${tokenCheck:check}")
     private String tokenCheck;
 
     @Autowired
     private RedisUtil redisUtil;
 
-    static {
-        List<String> userPermissions = new ArrayList<>();
-        permissionMap.put("user", userPermissions);
-        userPermissions.add("/api/user");
-        userPermissions.add("/api/scene/edit");
-        userPermissions.add("/api/scene/edit");
-        userPermissions.add("/api/order/scanPay");
-
-        List<String> managerPermissions = new ArrayList<>();
-        permissionMap.put("manager", managerPermissions);
-        userPermissions.add("/api/manager");
-
-        List<String> agentPermissions = new ArrayList<>();
-        permissionMap.put("agent", agentPermissions);
-        userPermissions.add("/api/agent");
-
-        List<String> appPermissions = new ArrayList<>();
-        permissionMap.put("app", appPermissions);
-        userPermissions.add("/api/app");
-
-
-        ignoreAuthUrls.add("/api/sso");
-
-    }
-
-
-    /**
-     * 忽略过滤的路径
-     */
-
-//    @Value("${com.cuslink.ignoreAuthUrls}")
-//    private String ignoreAuthUrls;
+    @Autowired
+    private PermissionConfig permissionConfig;
 
     @Override
     public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
@@ -125,20 +94,7 @@ public class OfficialTokenFilter implements GatewayFilter, Ordered {
 //                    return response.writeWith(Mono.just(buffer));
 //                }
 
-                // TODO: 2021/12/21  校验资源权限  用户资源可以从token中取,这里暂时先写死
-                //根据用户ID查询角色列表
-                //根据角色查询可访问资源权限列表
-                //遍历权限列表,对比path,如果匹配上,则放行
-                List<String> permissions = permissionMap.get(loginType);
-                Boolean isPermission = true;
-//                for (String permission : permissions) {
-//                    if(path.contains(permission)){
-//                        isPermission = true;
-//                        break;
-//                    }
-//                }
-
-                if(isPermission){
+                if(this.checkPermission(path, loginType)){
                     return chain.filter(exchange);
                 }
             }
@@ -147,6 +103,19 @@ public class OfficialTokenFilter implements GatewayFilter, Ordered {
         return response.writeWith(Mono.just(buffer));
     }
 
+    private boolean checkPermission(String path, String loginType){
+        // TODO: 2021/12/21  校验资源权限  用户资源可以从token中取,这里暂时先写死
+        //根据用户ID查询角色列表
+        //根据角色查询可访问资源权限列表
+        //遍历权限列表,对比path,如果匹配上,则放行
+        Boolean isPermission = false;
+        List<String> permissions = permissionConfig.getPermissionsByLoginType(loginType);
+        if(CollUtil.isNotEmpty(permissions)){
+            isPermission = permissions.stream().anyMatch(per -> path.startsWith(per));
+        }
+        return isPermission;
+    }
+
 
     private DataBuffer setResponseInfo(ServerHttpResponse response, ResultData resultData) {
         response.setStatusCode(HttpStatus.UNAUTHORIZED);
@@ -164,6 +133,10 @@ public class OfficialTokenFilter implements GatewayFilter, Ordered {
      */
     private boolean decideIgnore(String servletPath) {
         //跳过不需要验证的路径
+        List<String> ignoreAuthUrls = permissionConfig.getIgnore();
+        if(CollUtil.isEmpty(ignoreAuthUrls)){
+            return false;
+        }
         for (String ignore : ignoreAuthUrls) {
             if (servletPath.contains(ignore)) {
                 return true;

+ 8 - 1
src/main/resources/bootstrap.yml

@@ -23,4 +23,11 @@ spring:
         server-addr: 192.168.0.47:8848
         namespace: 4dkankan-dev
 
-
+management:
+  endpoints:
+    web:
+      exposure:
+        include: '*'
+  endpoint:
+    health:
+      show-details: ALWAYS