李进 2 år sedan
förälder
incheckning
7820c1e625

+ 3 - 7
authorize-api-service/src/main/java/com/xy/config/SaTokenInterceptorImpl.java

@@ -1,11 +1,10 @@
 package com.xy.config;
 
-import cn.dev33.satoken.stp.StpUtil;
 import com.xy.ServerWebConfig;
 import com.xy.enums.SaTokenEnum;
 import com.xy.error.CommRuntimeException;
 import com.xy.swagger.Knife4jConfig;
-import com.xy.utils.Emptys;
+import com.xy.utils.AuthorizeUtils;
 import lombok.AllArgsConstructor;
 import org.springframework.stereotype.Component;
 import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
@@ -31,11 +30,8 @@ public class SaTokenInterceptorImpl extends HandlerInterceptorAdapter implements
     @Override
     public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
         String satoken = request.getHeader(saTokenAuthorizeConfig.getTokenName());
-        if (!Emptys.check(satoken)) {
-            throw new CommRuntimeException(SaTokenEnum.NO_LOGIN.getKey(), SaTokenEnum.NO_LOGIN.getName());
-        }
-        Object loginIdByToken = StpUtil.getLoginIdByToken(satoken);
-        if (loginIdByToken == null) {
+        boolean b = AuthorizeUtils.authByLogin(satoken);
+        if (!b) {
             throw new CommRuntimeException(SaTokenEnum.NO_LOGIN.getKey(), SaTokenEnum.NO_LOGIN.getName());
         }
         return true;

+ 17 - 5
authorize-api-service/src/main/java/com/xy/redis/RedisCache.java

@@ -19,6 +19,7 @@ import org.springframework.web.context.request.ServletRequestAttributes;
 import javax.servlet.http.HttpServletRequest;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
 
 /**
  * 权限系统redis工具类
@@ -109,16 +110,16 @@ public class RedisCache extends AuthorizeUtils {
     /**
      * 判断数据查询权限
      *
-     * @param loginId            登录id
+     * @param token              登录id
      * @param lambdaQueryWrapper 查询构造器
      * @param function           普通查询权限时,条件lambda引用字段
      * @return true=管理员数据查询权限 false=普通查询权限
      */
-    public static <T> boolean getDataAuth(Long loginId, Long systemId, LambdaQueryWrapper<T> lambdaQueryWrapper, SFunction<T, ?> function) {
+    public static <T> boolean getDataAuth(String token, Long systemId, LambdaQueryWrapper<T> lambdaQueryWrapper, SFunction<T, ?> function) {
         HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
-        boolean dataAuth = getDataAuth(loginId, systemId, request.getRequestURI());
+        boolean dataAuth = getDataAuth(token, systemId, request.getRequestURI());
         if (!dataAuth) {
-            lambdaQueryWrapper.eq(function, loginId);
+            lambdaQueryWrapper.eq(function, SaTokenUtils.getId(Long.class));
         }
         return false;
     }
@@ -131,7 +132,18 @@ public class RedisCache extends AuthorizeUtils {
      * @return true=管理员数据查询权限 false=普通查询权限
      */
     public static <T> boolean getDataAuth(Long systemId, LambdaQueryWrapper<T> lambdaQueryWrapper, SFunction<T, ?> function) {
-        return getDataAuth(SaTokenUtils.getId(Long.class), systemId, lambdaQueryWrapper, function);
+        return getDataAuth(SaTokenUtils.getToken(), systemId, lambdaQueryWrapper, function);
     }
 
+    /**
+     * 检验系统ID是否属于当前登录人
+     *
+     * @param token    token
+     * @param systemId 系统id
+     * @return
+     */
+    public static Boolean checkSystemId(String token, Long systemId) {
+        Map<String, List<CacheEntity>> map = getRedisService().getMap(getKey(getLoginId(token, Long.class)));
+        return map.containsKey(systemId.toString());
+    }
 }

+ 99 - 0
authorize-api-service/src/main/java/com/xy/service/impl/AuthorizeServiceImpl.java

@@ -0,0 +1,99 @@
+package com.xy.service.impl;
+
+import com.xy.dto.AuthorizeDto;
+import com.xy.dto.SysMenuDto;
+import com.xy.redis.RedisCache;
+import com.xy.service.AuthorizeService;
+import com.xy.service.SysMenuService;
+import com.xy.utils.R;
+import com.xy.utils.SaTokenUtils;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.AllArgsConstructor;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+@Service
+@Api(tags = "统一对外接口")
+@AllArgsConstructor
+public class AuthorizeServiceImpl implements AuthorizeService {
+
+    private SysMenuService sysMenuService;
+
+    @Override
+    @ApiOperation("获取菜单")
+    public R<List<SysMenuDto.Vo>> workMenu(SysMenuDto.WorkMenu workMenu) {
+        return sysMenuService.workMenu(workMenu);
+    }
+
+    @Override
+    @ApiOperation("判断数据查询权限")
+    public R<Boolean> getDataAuth(AuthorizeDto authorizeDto) {
+        boolean dataAuth = RedisCache.getDataAuth(SaTokenUtils.getToken(), authorizeDto.getSystemId(), authorizeDto.getUri());
+        return R.ok(dataAuth);
+    }
+
+    @Override
+    @ApiOperation("获取所有系统ID")
+    public R<List<Long>> getSystemIds() {
+        List<Long> systemIds = RedisCache.getSystemIds(SaTokenUtils.getToken());
+        return R.ok(systemIds);
+    }
+
+    @Override
+    @ApiOperation("获取所有角色ID")
+    public R<List<Long>> getRoleIds(AuthorizeDto authorizeDto) {
+        List<Long> roleIds = RedisCache.getRoleIds(SaTokenUtils.getToken(), authorizeDto.getSystemId());
+        return R.ok(roleIds);
+    }
+
+    @Override
+    @ApiOperation("获取所有角色CODE")
+    public R<List<String>> getRoleCodes(AuthorizeDto authorizeDto) {
+        List<String> roleCodes = RedisCache.getRoleCodes(SaTokenUtils.getToken(), authorizeDto.getSystemId());
+        return R.ok(roleCodes);
+    }
+
+    @Override
+    @ApiOperation("是否是管理员")
+    public R<Boolean> isAdmin(AuthorizeDto authorizeDto) {
+        Boolean admin = RedisCache.isAdmin(SaTokenUtils.getToken(), authorizeDto.getSystemId());
+        return R.ok(admin);
+    }
+
+    @Override
+    @ApiOperation("获取所有菜单接口uri")
+    public R<List<String>> getMenuInterfaceUri(AuthorizeDto authorizeDto) {
+        List<String> menuInterfaceUri = RedisCache.getMenuInterfaceUri(SaTokenUtils.getToken(), authorizeDto.getSystemId());
+        return R.ok(menuInterfaceUri);
+    }
+
+    @Override
+    @ApiOperation("登录鉴权")
+    public R<Boolean> authByLogin() {
+        boolean b = RedisCache.authByLogin(SaTokenUtils.getToken());
+        return R.ok(b);
+    }
+
+    @Override
+    @ApiOperation("接口鉴权")
+    public R<Boolean> authByInterface(AuthorizeDto authorizeDto) {
+        boolean b = RedisCache.authByInterface(SaTokenUtils.getToken(), authorizeDto.getSystemId(), authorizeDto.getUri());
+        return R.ok(b);
+    }
+
+    @Override
+    @ApiOperation("数据鉴权")
+    public R<Boolean> authByData(AuthorizeDto authorizeDto) {
+        boolean b = RedisCache.authByData(SaTokenUtils.getToken(), authorizeDto.getSystemId(), authorizeDto.getUri());
+        return R.ok(b);
+    }
+
+    @Override
+    @ApiOperation("获取登录id")
+    public R<Object> getLoginId() {
+        Object loginId = RedisCache.getLoginId(SaTokenUtils.getToken(), Object.class);
+        return R.ok(loginId);
+    }
+}

+ 1 - 2
authorize-api-service/src/main/java/com/xy/service/impl/SysMenuServiceImpl.java

@@ -49,8 +49,7 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
     @ApiOperation("用户菜单树")
     public R<List<SysMenuDto.Vo>> workMenu(SysMenuDto.WorkMenu workMenu) {
         List<SysMenuDto.Vo> list = new ArrayList<>();
-        Long longId = SaTokenUtils.getId(Long.class);
-        List<SysMenuJoinSysRoleMenu> menus = RedisCache.getMenuTree(longId, workMenu.getSystemId());
+        List<SysMenuJoinSysRoleMenu> menus = RedisCache.getMenuTree(SaTokenUtils.getToken(), workMenu.getSystemId());
         menus.forEach(sysMenuJoinSysRoleMenu -> {
             SysMenuDto.Vo vo = copy(SysMenuDto.Vo.class, sysMenuJoinSysRoleMenu);
             List<SysMenuDto.Vo> sonVos = copy(SysMenuDto.Vo.class, sysMenuJoinSysRoleMenu.getSonSysMenu());

+ 2 - 2
authorize-api-service/src/main/java/com/xy/service/impl/SysSystemServiceImpl.java

@@ -101,7 +101,7 @@ public class SysSystemServiceImpl extends ServiceImpl<SysSystemMapper, SysSystem
     @Override
     @ApiOperation("登录人所属系统列表")
     public R<List<SysSystemDto.Vo>> list(SysSystemDto.Select select) {
-        List<Long> systemIds = RedisCache.getSystemIds(SaTokenUtils.getId(Long.class));
+        List<Long> systemIds = RedisCache.getSystemIds(SaTokenUtils.getToken());
         LambdaQueryWrapper<SysSystem> lambdaQueryWrapper = new MybatisPlusQuery().eqWrapper(select, SysSystem.class)
                 .in(SysSystem::getId, systemIds)
                 .ge(SysSystem::getCreateTime, select.getBeginCreateTime())
@@ -122,7 +122,7 @@ public class SysSystemServiceImpl extends ServiceImpl<SysSystemMapper, SysSystem
                 .like(SysSystem::getName)
                 .build();
         //数据权限
-        RedisCache.getDataAuth(SaTokenUtils.getId(Long.class), pageSelect.getSystemId(), lambdaQueryWrapper, SysSystem::getCreateUser);
+        RedisCache.getDataAuth(SaTokenUtils.getToken(), pageSelect.getSystemId(), lambdaQueryWrapper, SysSystem::getCreateUser);
         IPage<SysSystem> page = page(toIPage(pageSelect.getPage()), lambdaQueryWrapper);
         return R.ok(toPageBean(SysSystemDto.Vo.class, page));
     }

+ 2 - 24
authorize-api-service/src/main/java/com/xy/service/impl/SysWorkUserServiceImpl.java

@@ -20,7 +20,6 @@ import com.xy.service.SysUserDeptService;
 import com.xy.service.SysUserRoleService;
 import com.xy.service.SysWorkUserService;
 import com.xy.utils.Beans;
-import com.xy.utils.Emptys;
 import com.xy.utils.R;
 import com.xy.utils.SaTokenUtils;
 import io.swagger.annotations.Api;
@@ -191,26 +190,12 @@ public class SysWorkUserServiceImpl extends ServiceImpl<SysWorkUserMapper, SysWo
 
     @Override
     public R<Boolean> authByLogin() {
-        String satoken = request.getHeader(saTokenAuthorizeConfig.getTokenName());
-        if (!Emptys.check(satoken)) {
-            return R.ok(false);
-        }
-        Object loginIdByToken = StpUtil.getLoginIdByToken(satoken);
-        if (loginIdByToken == null) {
-            return R.ok(false);
-        }
         return R.ok(true);
     }
 
     @Override
     public R<Boolean> authByInterface(AuthByInterface authByInterface) {
-        //登录鉴权
-        Boolean data = authByLogin().getData();
-        if (!data) {
-            return R.ok(false);
-        }
-        //接口鉴权
-        List<String> menuInterfaceUri = RedisCache.getMenuInterfaceUri(Long.parseLong(SaTokenUtils.getId().toString()), authByInterface.getSystemId());
+        List<String> menuInterfaceUri = RedisCache.getMenuInterfaceUri(SaTokenUtils.getToken(), authByInterface.getSystemId());
         if (!menuInterfaceUri.contains(authByInterface.getUri())) {
             return R.ok(false);
         }
@@ -219,14 +204,7 @@ public class SysWorkUserServiceImpl extends ServiceImpl<SysWorkUserMapper, SysWo
 
     @Override
     public R<Boolean> authByData(AuthByInterface authByInterface) {
-        //登录鉴权
-        Boolean data = authByLogin().getData();
-        if (!data) {
-            return R.ok(false);
-        }
-        //数据鉴权
-        long longId = Long.parseLong(SaTokenUtils.getId().toString());
-        boolean dataAuth = RedisCache.getDataAuth(longId, authByInterface.getSystemId(), authByInterface.getUri());
+        boolean dataAuth = RedisCache.getDataAuth(SaTokenUtils.getToken(), authByInterface.getSystemId(), authByInterface.getUri());
         return R.ok(dataAuth);
     }
 

+ 22 - 0
authorize-api/src/main/java/com/xy/dto/AuthorizeDto.java

@@ -0,0 +1,22 @@
+package com.xy.dto;
+
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+@Data
+@ApiModel("统一对外交互类")
+@Accessors(chain = true)
+public class AuthorizeDto {
+
+    /**
+     * 系统id
+     */
+    private Long systemId;
+
+    /**
+     * 接口uri
+     */
+    private String uri;
+
+}

+ 110 - 0
authorize-api/src/main/java/com/xy/service/AuthorizeService.java

@@ -0,0 +1,110 @@
+package com.xy.service;
+
+import com.xy.annotate.RestMappingController;
+import com.xy.dto.AuthorizeDto;
+import com.xy.dto.SysMenuDto;
+import com.xy.utils.R;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+
+import java.util.List;
+
+/**
+ * 统一对外接口
+ */
+@RestMappingController("authorize")
+public interface AuthorizeService {
+
+    /**
+     * 获取登录人菜单
+     *
+     * @return
+     */
+    @PostMapping("workMenu")
+    R<List<SysMenuDto.Vo>> workMenu(@RequestBody @Validated SysMenuDto.WorkMenu workMenu);
+
+    /**
+     * 判断数据查询权限
+     *
+     * @param authorizeDto
+     * @return
+     */
+    @PostMapping("getDataAuth")
+    R<Boolean> getDataAuth(@RequestBody AuthorizeDto authorizeDto);
+
+    /**
+     * 获取所有系统ID
+     *
+     * @return
+     */
+    @PostMapping("getSystemIds")
+    R<List<Long>> getSystemIds();
+
+    /**
+     * 获取所有角色ID
+     *
+     * @return
+     */
+    @PostMapping("getRoleIds")
+    R<List<Long>> getRoleIds(@RequestBody AuthorizeDto authorizeDto);
+
+    /**
+     * 获取所有角色code
+     *
+     * @param authorizeDto
+     * @return
+     */
+    @PostMapping("getRoleCodes")
+    R<List<String>> getRoleCodes(@RequestBody AuthorizeDto authorizeDto);
+
+    /**
+     * 是否是管理员
+     *
+     * @param authorizeDto
+     * @return
+     */
+    @PostMapping("isAdmin")
+    R<Boolean> isAdmin(@RequestBody AuthorizeDto authorizeDto);
+
+    /**
+     * 获取所有菜单接口uri
+     *
+     * @param authorizeDto
+     * @return
+     */
+    @PostMapping("getMenuInterfaceUri")
+    R<List<String>> getMenuInterfaceUri(@RequestBody AuthorizeDto authorizeDto);
+
+    /**
+     * 登录鉴权
+     *
+     * @return
+     */
+    @PostMapping("authByLogin")
+    R<Boolean> authByLogin();
+
+    /**
+     * 接口鉴权
+     *
+     * @return
+     */
+    @PostMapping("authByInterface")
+    R<Boolean> authByInterface(@RequestBody AuthorizeDto authorizeDto);
+
+    /**
+     * 数据鉴权
+     *
+     * @return
+     */
+    @PostMapping("authByData")
+    R<Boolean> authByData(@RequestBody AuthorizeDto authorizeDto);
+
+    /**
+     * 获取登录id
+     *
+     * @return
+     */
+    @PostMapping("getLoginId")
+    R<Object> getLoginId();
+}

+ 28 - 0
authorize-sdk/src/main/java/com/xy/config/AuthorizeConfig.java

@@ -0,0 +1,28 @@
+package com.xy.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+
+@Data
+@Component
+@ConfigurationProperties(prefix = "authorize")
+public class AuthorizeConfig {
+
+    /**
+     * 是否开启本地鉴权 默认=true
+     */
+    private Boolean isNative;
+
+    /**
+     * 权限服务访问地址
+     */
+    private String url;
+
+    /**
+     * 不需要鉴权的接口
+     */
+    private List<String> exclude;
+}

+ 5 - 0
authorize-sdk/src/main/java/com/xy/consts/CommConsts.java

@@ -12,4 +12,9 @@ public class CommConsts {
      */
     public static final Long ADMIN_USER_ID = 1L;
 
+    /**
+     * token的名称
+     */
+    public static final String TOKEN_NAME = "satoken";
+
 }

+ 184 - 146
authorize-sdk/src/main/java/com/xy/utils/AuthorizeUtils.java

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