diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/base/AuthController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/base/AuthController.java index e782225..5c74f44 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/base/AuthController.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/base/AuthController.java @@ -28,6 +28,7 @@ import org.springframework.web.bind.annotation.*; import java.util.ArrayList; import java.util.Comparator; import java.util.List; +import java.util.stream.Collectors; /** @@ -248,7 +249,9 @@ public class AuthController extends CoreBaseController { if (AuthUtil.getUserType().equals(CommonEnumUtil.USER_TYPE.ADMIN)) { SysMenu sysMenu = new SysMenu(); sysMenu.setMenuType(CommonEnumUtil.METHOD_LEVEL.PLUGIN.getValue()); - list = sysMenuService.findAllByBean(sysMenu); + list = sysMenuService.findAllByBean(sysMenu).stream() + .filter(menu -> menu.getId() != 100000000L) + .collect(Collectors.toList()); } else { List menuList = memTreeService.packTreeSysMenuByUserId(getSessionUser().getUser().getId()); list = memTreeService.packTreeSysMenuByParentIdAndMenuType(menuList, CommonConstWords.SYSTEM_MENU_ROOT_ID, CommonEnumUtil.METHOD_LEVEL.PLUGIN.getValue()); diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/base/WhiteController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/base/WhiteController.java index ee38d59..d526769 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/base/WhiteController.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/base/WhiteController.java @@ -98,6 +98,10 @@ public class WhiteController extends CoreBaseController { @Autowired private ILicenseClickService licenseClickService; + @Resource(name= CommonConstWords.IMPP_REDIS_SESSION) + private ImppRedis redisSession; + + @GetMapping(value = "/sys-locale-language/list") @ApiOperation(value = "查询可用语言",notes = "查询可用语言") public ResultBean listSysLocaleLanguage(){ @@ -581,4 +585,20 @@ public class WhiteController extends CoreBaseController { return ResultBean.fail(e).setCode(ImppExceptionEnum.SYSTEM_EXCEPTION.getCode()); } } + + @GetMapping(value = "/forced-offline/{loginName}") + @ApiOperation(value = "强制下线", notes = "强制下线") + public ResultBean forcedOffline(@PathVariable("loginName") String loginName){ + try { + SysUser sysUser = userService.getSysUserByLoginName(loginName); + ValidatorBean.checkNotNull(sysUser,"用户不存在,请检查【登录名】"); + redisSession.deleteBatchKey(CommonConstWords.SESSION_USER + ":*_" + sysUser.getId()); + return ResultBean.success("操作成功"); + } catch (ImppBusiException busExcep) { + return ResultBean.fail(busExcep); + } catch (Exception e) { + return ResultBean.fail(e).setCode(ImppExceptionEnum.SYSTEM_EXCEPTION.getCode()); + } + } + } diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysToolTypeController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysToolTypeController.java index 793f6d5..1c2f012 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysToolTypeController.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysToolTypeController.java @@ -54,6 +54,7 @@ public class SysToolTypeController extends CoreBaseController{ // 条件校验 ValidatorBean.beginValid(toolType).notNull("name",toolType.getName()); + toolType.setOrganizeCode(AuthUtil.getOrganize().getOrganizeCode()); // 添加初始化 ConvertBean.modelInitialize(toolType, AuthUtil.getSessionUser()); diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysUserService.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysUserService.java index 980ae07..4521286 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysUserService.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysUserService.java @@ -151,6 +151,9 @@ public class SysUserService implements ISysUserService { if(user == null){ throw new CredentialsException("用户不存在"); } + // 判断会话模式 + checkSessionMode(user.getId()); + packSessionUser(sessionUser, user, user.getUserType(),loginPlatform, languageCode,deviceId); packConfigSessionUser(sessionUser, user); AuthUtil.setSessionUser(sessionUser); @@ -160,6 +163,24 @@ public class SysUserService implements ISysUserService { return sessionUser; } + private void checkSessionMode(Long userId){ + int sessionMode = RedisCacheTool.getSysConfigIntVal(CommonConstWords.CONFIG_SESSION_MODE, + CommonEnumUtil.SESSION_MODE.OVERWRITE.getValue()); + if (sessionMode == CommonEnumUtil.SESSION_MODE.SEIZE.getValue()) { + String redisKey = CommonConstWords.SESSION_USER + ":*_" + userId; + List ds = redisSession.scan(redisKey); + + if (CollectionUtils.isNotEmpty(ds)) { + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) + .setErrorCode(ImppExceptionEnum.LOGIN_EXCEPTION_LOGGED.getCode()) + .setErrorDetail("用户已在其他设备登录,无法同时登录!") + .setErrorSolution("请联系管理员") + .build(); + } + } + } + @Override public BaseToken getToken(String loginName, String password, String languageCode, Integer loginPlatform) { SysUser user = this.getSysUserByLoginName(loginName); @@ -670,7 +691,7 @@ public class SysUserService implements ISysUserService { if(configPageSize != null && StringUtils.isNotBlank(configPageSize.getConfigValue())){ sessionUser.setPageDefaultSize(Integer.parseInt(configPageSize.getConfigValue())); } - }catch (Exception e){ + }catch (Exception ignored){ } if(sessionUser.getPageDefaultSize() == null || sessionUser.getPageDefaultSize() <= 0){ @@ -781,7 +802,11 @@ public class SysUserService implements ISysUserService { }); List roleList = roleService.findByIdList(ids); - roleList.forEach(role -> menuIdList.addAll(role.getMenuIdList())); + roleList.forEach(role -> { + if (role.getMenuIdList() != null) { + menuIdList.addAll(role.getMenuIdList()); + } + }); List menuList = menuService.findByIdList(new ArrayList<>(menuIdList)); if(CollectionUtils.isNotEmpty(menuList)){ for (SysMenu menu : menuList) {