|
@@ -1,10 +1,16 @@
|
|
|
package com.xy.utils;
|
|
|
|
|
|
import cn.dev33.satoken.stp.StpUtil;
|
|
|
+import cn.hutool.http.HttpRequest;
|
|
|
+import cn.hutool.json.JSONObject;
|
|
|
+import cn.hutool.json.JSONUtil;
|
|
|
import com.xy.collections.list.JArrayList;
|
|
|
import com.xy.collections.list.JList;
|
|
|
+import com.xy.config.AuthorizeConfig;
|
|
|
import com.xy.consts.CommConsts;
|
|
|
import com.xy.entity.SysMenuJoinSysRoleMenu;
|
|
|
+import com.xy.error.CommRuntimeException;
|
|
|
+import lombok.AllArgsConstructor;
|
|
|
import lombok.Data;
|
|
|
import lombok.experimental.Accessors;
|
|
|
import org.springframework.stereotype.Component;
|
|
@@ -15,8 +21,17 @@ import java.util.List;
|
|
|
import java.util.Map;
|
|
|
|
|
|
@Component
|
|
|
+@AllArgsConstructor
|
|
|
public class AuthorizeUtils {
|
|
|
|
|
|
+ protected static AuthorizeConfig getAuthorizeConfig() {
|
|
|
+ AuthorizeConfig authorizeConfig = SpringBeanUtils.getBean(AuthorizeConfig.class);
|
|
|
+ if (authorizeConfig.getIsNative() == null) {
|
|
|
+ authorizeConfig.setIsNative(true);
|
|
|
+ }
|
|
|
+ return authorizeConfig;
|
|
|
+ }
|
|
|
+
|
|
|
protected static RedisService<List<CacheEntity>> getRedisService() {
|
|
|
return SpringBeanUtils.getBean(RedisService.class);
|
|
|
}
|
|
@@ -25,17 +40,45 @@ public class AuthorizeUtils {
|
|
|
return String.format("%s:%d", "menu", loginId);
|
|
|
}
|
|
|
|
|
|
+ private static Object send(String interfaceUri, String token, JSONObject jsonObject) {
|
|
|
+ HttpRequest httpRequest = HttpRequest.post(getAuthorizeConfig().getUrl() + interfaceUri)
|
|
|
+ .header(CommConsts.TOKEN_NAME, token)
|
|
|
+ .timeout(5000);
|
|
|
+ if (jsonObject != null) {
|
|
|
+ httpRequest.body(jsonObject.toString());
|
|
|
+ }
|
|
|
+ String result = httpRequest.execute().body();
|
|
|
+ R r = JSONUtil.parseObj(result).toBean(R.class);
|
|
|
+ if (r.getCode() != 200) {
|
|
|
+ throw new CommRuntimeException(r.getMsg());
|
|
|
+ }
|
|
|
+ return r.getData();
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
/**
|
|
|
* 获取菜单
|
|
|
*
|
|
|
- * @param loginId 登录id
|
|
|
+ * @param token token
|
|
|
* @param systemId 系统id
|
|
|
* @return
|
|
|
*/
|
|
|
- public static List<SysMenuJoinSysRoleMenu> getMenu(Long loginId, Long systemId) {
|
|
|
+ public static List<SysMenuJoinSysRoleMenu> getMenu(String token, Long systemId) {
|
|
|
+ {
|
|
|
+ //远程调用
|
|
|
+ AuthorizeConfig authorizeConfig = getAuthorizeConfig();
|
|
|
+ if (!authorizeConfig.getIsNative()) {
|
|
|
+ JSONObject jsonObject = new JSONObject().set("systemId", systemId);
|
|
|
+ Object obj = send("/authorize/workMenu", token, jsonObject);
|
|
|
+ if (obj == null) {
|
|
|
+ return new ArrayList<>();
|
|
|
+ }
|
|
|
+ return JSONUtil.parseArray(obj).toList(SysMenuJoinSysRoleMenu.class);
|
|
|
+ }
|
|
|
+ }
|
|
|
JList<SysMenuJoinSysRoleMenu> sysMenuJoinSysRoleMenus = new JArrayList<>();
|
|
|
//获取redis缓存
|
|
|
- List<AuthorizeUtils.CacheEntity> cacheEntities = getRedisService().getMap(getKey(loginId), systemId.toString());
|
|
|
+ List<AuthorizeUtils.CacheEntity> cacheEntities = getRedisService().getMap(getKey(getLoginId(token, Long.class)), systemId.toString());
|
|
|
if (!Emptys.check(cacheEntities)) {
|
|
|
return sysMenuJoinSysRoleMenus;
|
|
|
}
|
|
@@ -50,26 +93,16 @@ public class AuthorizeUtils {
|
|
|
return sysMenuJoinSysRoleMenus;
|
|
|
}
|
|
|
|
|
|
- /**
|
|
|
- * 获取菜单
|
|
|
- *
|
|
|
- * @param systemId 系统id
|
|
|
- * @return
|
|
|
- */
|
|
|
- public static List<SysMenuJoinSysRoleMenu> getMenu(String token, Long systemId) {
|
|
|
- return getMenu(getLoginId(token, Long.class), systemId);
|
|
|
- }
|
|
|
-
|
|
|
/**
|
|
|
* 获取菜单树
|
|
|
*
|
|
|
- * @param loginId 登录id
|
|
|
+ * @param token token
|
|
|
* @param systemId 系统id
|
|
|
* @return
|
|
|
*/
|
|
|
- public static List<SysMenuJoinSysRoleMenu> getMenuTree(Long loginId, Long systemId) {
|
|
|
+ public static List<SysMenuJoinSysRoleMenu> getMenuTree(String token, Long systemId) {
|
|
|
//获取菜单
|
|
|
- JList<SysMenuJoinSysRoleMenu> sysMenuJoinSysRoleMenus = new JArrayList<>(getMenu(loginId, systemId));
|
|
|
+ JList<SysMenuJoinSysRoleMenu> sysMenuJoinSysRoleMenus = new JArrayList<>(getMenu(token, systemId));
|
|
|
//生成树
|
|
|
JList<SysMenuJoinSysRoleMenu> tops = sysMenuJoinSysRoleMenus.filter().isNull(SysMenuJoinSysRoleMenu::getPaterId).list();
|
|
|
for (SysMenuJoinSysRoleMenu top : tops) {
|
|
@@ -79,27 +112,28 @@ public class AuthorizeUtils {
|
|
|
return tops;
|
|
|
}
|
|
|
|
|
|
- /**
|
|
|
- * 获取菜单树
|
|
|
- *
|
|
|
- * @param systemId 系统id
|
|
|
- * @return
|
|
|
- */
|
|
|
- public static List<SysMenuJoinSysRoleMenu> getMenuTree(String token, Long systemId) {
|
|
|
- return getMenuTree(getLoginId(token, Long.class), systemId);
|
|
|
- }
|
|
|
-
|
|
|
/**
|
|
|
* 判断数据查询权限
|
|
|
*
|
|
|
- * @param loginId 登录id
|
|
|
* @param systemId 系统id
|
|
|
* @param systemId 接口uri
|
|
|
* @return true=管理员数据查询权限 false=普通查询权限
|
|
|
*/
|
|
|
- public static boolean getDataAuth(Long loginId, Long systemId, String uri) {
|
|
|
+ public static boolean getDataAuth(String token, Long systemId, String uri) {
|
|
|
+ {
|
|
|
+ //远程调用
|
|
|
+ AuthorizeConfig authorizeConfig = getAuthorizeConfig();
|
|
|
+ if (!authorizeConfig.getIsNative()) {
|
|
|
+ JSONObject jsonObject = new JSONObject().set("systemId", systemId).set("uri", uri);
|
|
|
+ Object obj = send("/authorize/getDataAuth", token, jsonObject);
|
|
|
+ if (obj == null) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ return Boolean.valueOf(obj.toString());
|
|
|
+ }
|
|
|
+ }
|
|
|
//获取redis缓存
|
|
|
- List<AuthorizeUtils.CacheEntity> cacheEntities = getRedisService().getMap(getKey(loginId), systemId.toString());
|
|
|
+ List<AuthorizeUtils.CacheEntity> cacheEntities = getRedisService().getMap(getKey(getLoginId(token, Long.class)), systemId.toString());
|
|
|
if (!Emptys.check(cacheEntities)) {
|
|
|
return false;
|
|
|
}
|
|
@@ -117,25 +151,25 @@ public class AuthorizeUtils {
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
- /**
|
|
|
- * 判断数据查询权限
|
|
|
- *
|
|
|
- * @param systemId 系统id
|
|
|
- * @param systemId 接口uri
|
|
|
- * @return true=管理员数据查询权限 false=普通查询权限
|
|
|
- */
|
|
|
- public static boolean getDataAuth(String token, Long systemId, String uri) {
|
|
|
- return getDataAuth(getLoginId(token, Long.class), systemId, uri);
|
|
|
- }
|
|
|
-
|
|
|
/**
|
|
|
* 获取所有系统ID
|
|
|
*
|
|
|
- * @param loginId 登录id
|
|
|
+ * @param token token
|
|
|
* @return
|
|
|
*/
|
|
|
- public static List<Long> getSystemIds(Long loginId) {
|
|
|
- Map<String, List<CacheEntity>> map = getRedisService().getMap(getKey(loginId));
|
|
|
+ public static List<Long> getSystemIds(String token) {
|
|
|
+ {
|
|
|
+ //远程调用
|
|
|
+ AuthorizeConfig authorizeConfig = getAuthorizeConfig();
|
|
|
+ if (!authorizeConfig.getIsNative()) {
|
|
|
+ Object obj = send("/authorize/getSystemIds", token, null);
|
|
|
+ if (obj == null) {
|
|
|
+ return new ArrayList<>();
|
|
|
+ }
|
|
|
+ return JSONUtil.parseArray(obj).toList(Long.class);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ Map<String, List<CacheEntity>> map = getRedisService().getMap(getKey(getLoginId(token, Long.class)));
|
|
|
if (!Emptys.check(map)) {
|
|
|
return new ArrayList<>();
|
|
|
}
|
|
@@ -144,48 +178,27 @@ public class AuthorizeUtils {
|
|
|
return list;
|
|
|
}
|
|
|
|
|
|
- /**
|
|
|
- * 获取所有系统ID
|
|
|
- *
|
|
|
- * @param token token
|
|
|
- * @return
|
|
|
- */
|
|
|
- public static List<Long> getSystemIds(String token) {
|
|
|
- return getSystemIds(getLoginId(token, Long.class));
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 检验系统ID是否属于当前登录人
|
|
|
- *
|
|
|
- * @param loginId 登录id
|
|
|
- * @param systemId 系统id
|
|
|
- * @return
|
|
|
- */
|
|
|
- public static Boolean checkSystemId(Long loginId, Long systemId) {
|
|
|
- Map<String, List<AuthorizeUtils.CacheEntity>> map = getRedisService().getMap(getKey(loginId));
|
|
|
- return map.containsKey(systemId.toString());
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 检验系统ID是否属于当前登录人
|
|
|
- *
|
|
|
- * @param token token
|
|
|
- * @param systemId 系统id
|
|
|
- * @return
|
|
|
- */
|
|
|
- public static Boolean checkSystemId(String token, Long systemId) {
|
|
|
- return checkSystemId(getLoginId(token, Long.class), systemId);
|
|
|
- }
|
|
|
-
|
|
|
/**
|
|
|
* 获取所有角色ID
|
|
|
*
|
|
|
- * @param loginId 登录id
|
|
|
+ * @param token token
|
|
|
* @param systemId 系统id
|
|
|
* @return
|
|
|
*/
|
|
|
- public static List<Long> getRoleIds(Long loginId, Long systemId) {
|
|
|
- List<AuthorizeUtils.CacheEntity> cacheEntities = getRedisService().getMap(getKey(loginId), systemId.toString());
|
|
|
+ public static List<Long> getRoleIds(String token, Long systemId) {
|
|
|
+ {
|
|
|
+ //远程调用
|
|
|
+ AuthorizeConfig authorizeConfig = getAuthorizeConfig();
|
|
|
+ if (!authorizeConfig.getIsNative()) {
|
|
|
+ JSONObject jsonObject = new JSONObject().set("systemId", systemId);
|
|
|
+ Object obj = send("/authorize/getRoleIds", token, jsonObject);
|
|
|
+ if (obj == null) {
|
|
|
+ return new ArrayList<>();
|
|
|
+ }
|
|
|
+ return JSONUtil.parseArray(obj).toList(Long.class);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ List<AuthorizeUtils.CacheEntity> cacheEntities = getRedisService().getMap(getKey(getLoginId(token, Long.class)), systemId.toString());
|
|
|
if (!Emptys.check(cacheEntities)) {
|
|
|
return new ArrayList<>();
|
|
|
}
|
|
@@ -194,26 +207,27 @@ public class AuthorizeUtils {
|
|
|
return list;
|
|
|
}
|
|
|
|
|
|
- /**
|
|
|
- * 获取所有角色ID
|
|
|
- *
|
|
|
- * @param token token
|
|
|
- * @param systemId 系统id
|
|
|
- * @return
|
|
|
- */
|
|
|
- public static List<Long> getRoleIds(String token, Long systemId) {
|
|
|
- return getRoleIds(getLoginId(token, Long.class), systemId);
|
|
|
- }
|
|
|
-
|
|
|
/**
|
|
|
* 获取所有角色code
|
|
|
*
|
|
|
- * @param loginId 登录id
|
|
|
+ * @param token token
|
|
|
* @param systemId 系统id
|
|
|
* @return
|
|
|
*/
|
|
|
- public static List<String> getRoleCodes(Long loginId, Long systemId) {
|
|
|
- List<AuthorizeUtils.CacheEntity> cacheEntities = getRedisService().getMap(getKey(loginId), systemId.toString());
|
|
|
+ public static List<String> getRoleCodes(String token, Long systemId) {
|
|
|
+ {
|
|
|
+ //远程调用
|
|
|
+ AuthorizeConfig authorizeConfig = getAuthorizeConfig();
|
|
|
+ if (!authorizeConfig.getIsNative()) {
|
|
|
+ JSONObject jsonObject = new JSONObject().set("systemId", systemId);
|
|
|
+ Object obj = send("/authorize/getRoleCodes", token, jsonObject);
|
|
|
+ if (obj == null) {
|
|
|
+ return new ArrayList<>();
|
|
|
+ }
|
|
|
+ return JSONUtil.parseArray(obj).toList(String.class);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ List<AuthorizeUtils.CacheEntity> cacheEntities = getRedisService().getMap(getKey(getLoginId(token, Long.class)), systemId.toString());
|
|
|
if (!Emptys.check(cacheEntities)) {
|
|
|
return new ArrayList<>();
|
|
|
}
|
|
@@ -222,54 +236,56 @@ public class AuthorizeUtils {
|
|
|
return list;
|
|
|
}
|
|
|
|
|
|
- /**
|
|
|
- * 获取所有角色code
|
|
|
- *
|
|
|
- * @param token token
|
|
|
- * @param systemId 系统id
|
|
|
- * @return
|
|
|
- */
|
|
|
- public static List<String> getRoleCodes(String token, Long systemId) {
|
|
|
- return getRoleCodes(getLoginId(token, Long.class), systemId);
|
|
|
- }
|
|
|
-
|
|
|
/**
|
|
|
* 是否是管理员
|
|
|
*
|
|
|
- * @param loginId 登录id
|
|
|
+ * @param token token
|
|
|
* @param systemId 系统id
|
|
|
* @return
|
|
|
*/
|
|
|
- public static Boolean isAdmin(Long loginId, Long systemId) {
|
|
|
- List<String> roleCodes = getRoleCodes(loginId, systemId);
|
|
|
+ public static Boolean isAdmin(String token, Long systemId) {
|
|
|
+ {
|
|
|
+ //远程调用
|
|
|
+ AuthorizeConfig authorizeConfig = getAuthorizeConfig();
|
|
|
+ if (!authorizeConfig.getIsNative()) {
|
|
|
+ JSONObject jsonObject = new JSONObject().set("systemId", systemId);
|
|
|
+ Object obj = send("/authorize/isAdmin", token, jsonObject);
|
|
|
+ if (obj == null) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ return Boolean.valueOf(obj.toString());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ List<String> roleCodes = getRoleCodes(token, systemId);
|
|
|
if (roleCodes.contains(CommConsts.ADMIN_ROLE_CODE)) {
|
|
|
return true;
|
|
|
}
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
- /**
|
|
|
- * 是否是管理员
|
|
|
- *
|
|
|
- * @param token token
|
|
|
- * @param systemId 系统id
|
|
|
- * @return
|
|
|
- */
|
|
|
- public static Boolean isAdmin(String token, Long systemId) {
|
|
|
- return isAdmin(getLoginId(token, Long.class), systemId);
|
|
|
- }
|
|
|
-
|
|
|
/**
|
|
|
* 获取所有菜单接口uri
|
|
|
*
|
|
|
- * @param loginId 登录id
|
|
|
+ * @param token token
|
|
|
* @param systemId 系统id
|
|
|
* @return
|
|
|
*/
|
|
|
- public static List<String> getMenuInterfaceUri(Long loginId, Long systemId) {
|
|
|
+ public static List<String> getMenuInterfaceUri(String token, Long systemId) {
|
|
|
+ {
|
|
|
+ //远程调用
|
|
|
+ AuthorizeConfig authorizeConfig = getAuthorizeConfig();
|
|
|
+ if (!authorizeConfig.getIsNative()) {
|
|
|
+ JSONObject jsonObject = new JSONObject().set("systemId", systemId);
|
|
|
+ Object obj = send("/authorize/getMenuInterfaceUri", token, jsonObject);
|
|
|
+ if (obj == null) {
|
|
|
+ return new ArrayList<>();
|
|
|
+ }
|
|
|
+ return JSONUtil.parseArray(obj).toList(String.class);
|
|
|
+ }
|
|
|
+ }
|
|
|
JList<String> list = new JArrayList<>();
|
|
|
//获取redis缓存
|
|
|
- List<AuthorizeUtils.CacheEntity> cacheEntities = getRedisService().getMap(getKey(loginId), systemId.toString());
|
|
|
+ List<AuthorizeUtils.CacheEntity> cacheEntities = getRedisService().getMap(getKey(getLoginId(token, Long.class)), systemId.toString());
|
|
|
if (!Emptys.check(cacheEntities)) {
|
|
|
return list;
|
|
|
}
|
|
@@ -284,17 +300,6 @@ public class AuthorizeUtils {
|
|
|
return list.comparing();
|
|
|
}
|
|
|
|
|
|
- /**
|
|
|
- * 获取所有菜单接口uri
|
|
|
- *
|
|
|
- * @param token token
|
|
|
- * @param systemId 系统id
|
|
|
- * @return
|
|
|
- */
|
|
|
- public static List<String> getMenuInterfaceUri(String token, Long systemId) {
|
|
|
- return getMenuInterfaceUri(getLoginId(token, Long.class), systemId);
|
|
|
- }
|
|
|
-
|
|
|
/**
|
|
|
* 登录鉴权
|
|
|
*
|
|
@@ -302,6 +307,17 @@ public class AuthorizeUtils {
|
|
|
* @return
|
|
|
*/
|
|
|
public static boolean authByLogin(String token) {
|
|
|
+ {
|
|
|
+ //远程调用
|
|
|
+ AuthorizeConfig authorizeConfig = getAuthorizeConfig();
|
|
|
+ if (!authorizeConfig.getIsNative()) {
|
|
|
+ Object obj = send("/authorize/authByLogin", token, null);
|
|
|
+ if (obj == null) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ return Boolean.valueOf(obj.toString());
|
|
|
+ }
|
|
|
+ }
|
|
|
if (!Emptys.check(token)) {
|
|
|
return false;
|
|
|
}
|
|
@@ -321,13 +337,19 @@ public class AuthorizeUtils {
|
|
|
* @return
|
|
|
*/
|
|
|
public static boolean authByInterface(String token, Long systemId, String uri) {
|
|
|
- //登录鉴权
|
|
|
- Boolean data = authByLogin(token);
|
|
|
- if (!data) {
|
|
|
- return false;
|
|
|
+ {
|
|
|
+ //远程调用
|
|
|
+ AuthorizeConfig authorizeConfig = getAuthorizeConfig();
|
|
|
+ if (!authorizeConfig.getIsNative()) {
|
|
|
+ JSONObject jsonObject = new JSONObject().set("systemId", systemId).set("uri", uri);
|
|
|
+ Object obj = send("/authorize/authByInterface", token, jsonObject);
|
|
|
+ if (obj == null) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ return Boolean.valueOf(obj.toString());
|
|
|
+ }
|
|
|
}
|
|
|
- //接口鉴权
|
|
|
- List<String> menuInterfaceUri = getMenuInterfaceUri(getLoginId(token, Long.class), systemId);
|
|
|
+ List<String> menuInterfaceUri = getMenuInterfaceUri(token, systemId);
|
|
|
if (!menuInterfaceUri.contains(uri)) {
|
|
|
return false;
|
|
|
}
|
|
@@ -343,14 +365,19 @@ public class AuthorizeUtils {
|
|
|
* @return
|
|
|
*/
|
|
|
public static boolean authByData(String token, Long systemId, String uri) {
|
|
|
- //登录鉴权
|
|
|
- Boolean data = authByLogin(token);
|
|
|
- if (!data) {
|
|
|
- return false;
|
|
|
+ {
|
|
|
+ //远程调用
|
|
|
+ AuthorizeConfig authorizeConfig = getAuthorizeConfig();
|
|
|
+ if (!authorizeConfig.getIsNative()) {
|
|
|
+ JSONObject jsonObject = new JSONObject().set("systemId", systemId).set("uri", uri);
|
|
|
+ Object obj = send("/authorize/authByData", token, jsonObject);
|
|
|
+ if (obj == null) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ return Boolean.valueOf(obj.toString());
|
|
|
+ }
|
|
|
}
|
|
|
- //数据鉴权
|
|
|
- long longId = getLoginId(token, Long.class);
|
|
|
- return getDataAuth(longId, systemId, uri);
|
|
|
+ return getDataAuth(token, systemId, uri);
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -362,7 +389,18 @@ public class AuthorizeUtils {
|
|
|
* @return
|
|
|
*/
|
|
|
public static <T> T getLoginId(String token, Class<T> tClass) {
|
|
|
- Object id = StpUtil.getLoginIdByToken(token);
|
|
|
+ Object id;
|
|
|
+ //远程调用
|
|
|
+ AuthorizeConfig authorizeConfig = getAuthorizeConfig();
|
|
|
+ if (!authorizeConfig.getIsNative()) {
|
|
|
+ Object obj = send("/authorize/getLoginId", token, null);
|
|
|
+ if (obj == null) {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ id = obj;
|
|
|
+ } else {
|
|
|
+ id = StpUtil.getLoginIdByToken(token);
|
|
|
+ }
|
|
|
String idStr = id.toString();
|
|
|
return tClass.equals(Long.class) ? (T) Long.valueOf(idStr)
|
|
|
: tClass.equals(Integer.class) ? (T) Integer.valueOf(idStr)
|