LoginHelper.java 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. package com.kxmall.common.helper;
  2. import cn.dev33.satoken.context.SaHolder;
  3. import cn.dev33.satoken.stp.StpUtil;
  4. import cn.hutool.core.util.ObjectUtil;
  5. import com.kxmall.common.constant.UserConstants;
  6. import com.kxmall.common.exception.UtilException;
  7. import com.kxmall.common.core.domain.model.LoginUser;
  8. import com.kxmall.common.enums.DeviceType;
  9. import com.kxmall.common.enums.UserType;
  10. import com.kxmall.common.utils.StringUtils;
  11. import lombok.AccessLevel;
  12. import lombok.NoArgsConstructor;
  13. /**
  14. * 登录鉴权助手
  15. *
  16. * user_type 为 用户类型 同一个用户表 可以有多种用户类型 例如 pc,app
  17. * deivce 为 设备类型 同一个用户类型 可以有 多种设备类型 例如 web,ios
  18. * 可以组成 用户类型与设备类型多对多的 权限灵活控制
  19. *
  20. * 多用户体系 针对 多种用户类型 但权限控制不一致
  21. * 可以组成 多用户类型表与多设备类型 分别控制权限
  22. *
  23. * @author kxmall
  24. */
  25. @NoArgsConstructor(access = AccessLevel.PRIVATE)
  26. public class LoginHelper {
  27. public static final String JOIN_CODE = ":";
  28. public static final String LOGIN_USER_KEY = "loginUser";
  29. /**
  30. * 登录系统
  31. *
  32. * @param loginUser 登录用户信息
  33. */
  34. public static void login(LoginUser loginUser) {
  35. SaHolder.getStorage().set(LOGIN_USER_KEY, loginUser);
  36. StpUtil.login(loginUser.getLoginId());
  37. setLoginUser(loginUser);
  38. }
  39. /**
  40. * 登录系统 基于 设备类型
  41. * 针对相同用户体系不同设备
  42. *
  43. * @param loginUser 登录用户信息
  44. */
  45. public static void loginByDevice(LoginUser loginUser, DeviceType deviceType) {
  46. SaHolder.getStorage().set(LOGIN_USER_KEY, loginUser);
  47. StpUtil.login(loginUser.getLoginId(), deviceType.getDevice());
  48. setLoginUser(loginUser);
  49. }
  50. /**
  51. * 设置用户数据(多级缓存)
  52. */
  53. public static void setLoginUser(LoginUser loginUser) {
  54. StpUtil.getTokenSession().set(LOGIN_USER_KEY, loginUser);
  55. }
  56. /**
  57. * 获取用户(多级缓存)
  58. */
  59. public static LoginUser getLoginUser() {
  60. LoginUser loginUser = (LoginUser) SaHolder.getStorage().get(LOGIN_USER_KEY);
  61. if (loginUser != null) {
  62. return loginUser;
  63. }
  64. loginUser = (LoginUser) StpUtil.getTokenSession().get(LOGIN_USER_KEY);
  65. SaHolder.getStorage().set(LOGIN_USER_KEY, loginUser);
  66. return loginUser;
  67. }
  68. /**
  69. * 获取设备
  70. */
  71. public static DeviceType getDeviceType() {
  72. String loginType = StpUtil.getLoginDevice();
  73. return DeviceType.getDeviceType(loginType);
  74. }
  75. /**
  76. * 获取用户id
  77. */
  78. public static Long getUserId() {
  79. LoginUser loginUser = getLoginUser();
  80. if (ObjectUtil.isNull(loginUser)) {
  81. String loginId = StpUtil.getLoginIdAsString();
  82. String userId = null;
  83. for (UserType value : UserType.values()) {
  84. if (StringUtils.contains(loginId, value.getUserType())) {
  85. String[] strs = StringUtils.split(loginId, JOIN_CODE);
  86. // 用户id在总是在最后
  87. userId = strs[strs.length - 1];
  88. }
  89. }
  90. if (StringUtils.isBlank(userId)) {
  91. throw new UtilException("登录用户: LoginId异常 => " + loginId);
  92. }
  93. return Long.parseLong(userId);
  94. }
  95. return loginUser.getUserId();
  96. }
  97. /**
  98. * 获取部门ID
  99. */
  100. public static Long getDeptId() {
  101. return getLoginUser().getDeptId();
  102. }
  103. /**
  104. * 获取用户账户
  105. */
  106. public static String getUsername() {
  107. return getLoginUser().getUsername();
  108. }
  109. /**
  110. * 获取用户类型
  111. */
  112. public static UserType getUserType() {
  113. String loginId = StpUtil.getLoginIdAsString();
  114. return UserType.getUserType(loginId);
  115. }
  116. /**
  117. * 是否为管理员
  118. *
  119. * @param userId 用户ID
  120. * @return 结果
  121. */
  122. public static boolean isAdmin(Long userId) {
  123. return UserConstants.ADMIN_ID.equals(userId);
  124. }
  125. public static boolean isAdmin() {
  126. return isAdmin(getUserId());
  127. }
  128. }