|
|
@@ -20,6 +20,7 @@ import org.springframework.web.context.request.ServletRequestAttributes;
|
|
|
import java.util.List;
|
|
|
import java.util.Objects;
|
|
|
import java.util.stream.Collectors;
|
|
|
+import java.util.stream.Stream;
|
|
|
|
|
|
@Aspect
|
|
|
@Component
|
|
|
@@ -48,45 +49,22 @@ public class PermissionAspect {
|
|
|
String token = request.getHeader("Authorization");
|
|
|
String system = request.getHeader("System");
|
|
|
|
|
|
- if(Objects.isNull(token)){
|
|
|
+ if(Objects.isNull(token) || Objects.isNull(redissonClient.getBucket(token).get())){
|
|
|
throw new TokenExpireException("无权限访问");
|
|
|
}
|
|
|
- String userTokenDataStr = redissonClient.getBucket(token).get().toString();
|
|
|
- if(Objects.isNull(userTokenDataStr))
|
|
|
- {
|
|
|
- throw new TokenExpireException();
|
|
|
- }
|
|
|
- //判断是否是admin用户 如果是的话则不进行权限过滤
|
|
|
- if(JSON.parseObject(userTokenDataStr).getString("username").equals("admin")){
|
|
|
- return;
|
|
|
- }
|
|
|
- JSONArray userSystemRole = JSON.parseObject(userTokenDataStr).getJSONArray("roles");
|
|
|
- List<String> userSystemRoleIds = userSystemRole.stream().map(role ->
|
|
|
- ((JSONObject) role).getString("roleId")).collect(Collectors.toList());
|
|
|
-
|
|
|
- //取出缓存中的所有权限信息做对比
|
|
|
- JSONArray jsonObject = JSON.parseArray(redissonClient.getBucket(RedisKeyConstants.ROLE_MENU_KEY).get().toString());
|
|
|
-
|
|
|
- //取出系统的
|
|
|
- JSONObject o = (JSONObject) jsonObject.stream()
|
|
|
- .filter(item -> ((JSONObject) item).getString("systemCode").equals(system)).findFirst().orElse(null);
|
|
|
-
|
|
|
- JSONArray collect = new JSONArray(o.getJSONArray("roleVos").stream()
|
|
|
- .filter(x -> userSystemRoleIds.contains(((JSONObject) x).getString("id")))
|
|
|
- .collect(Collectors.toList()));
|
|
|
-
|
|
|
- //提取所有perms字段
|
|
|
- List<String> permsList = collect.stream()
|
|
|
- .flatMap(role -> {
|
|
|
- JSONArray menuVos = ((JSONObject) role).getJSONArray("menuVos");
|
|
|
- return menuVos.stream()
|
|
|
- .map(menu -> ((JSONObject) menu).getString("perms"));
|
|
|
- })
|
|
|
- .collect(Collectors.toList());
|
|
|
-
|
|
|
- //判断是否用户是否存在权限标识
|
|
|
- if(!permsList.contains(permission)){
|
|
|
- throw new SystemException("无权限访问");
|
|
|
+ //如果权限标识为空 则不校验权限 只校验token
|
|
|
+ if(!permission.isEmpty()) {
|
|
|
+ String userTokenDataStr = redissonClient.getBucket(token).get().toString();
|
|
|
+ //判断是否是admin用户 如果是的话则不进行权限过滤
|
|
|
+ if (JSON.parseObject(userTokenDataStr).getString("username").equals("admin")) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ JSONArray userSystemRole = JSON.parseObject(userTokenDataStr).getJSONArray("auths");
|
|
|
+ Stream<String> permsList = userSystemRole.stream().map(item -> ((JSONObject) item).getString("perms"));
|
|
|
+ //判断是否用户是否存在权限标识
|
|
|
+ if (!permsList.anyMatch(p -> p.equals(permission))) {
|
|
|
+ throw new TokenExpireException("无权限访问");
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
}
|