|
@@ -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;
|