StpUserUtil.java 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966
  1. package com.pj.current.satoken;
  2. import java.util.List;
  3. import cn.hutool.json.JSONObject;
  4. import cn.hutool.json.JSONUtil;
  5. import com.pj.project4sp.admin.SpAdmin;
  6. import com.pj.utils.cache.RedisUtil;
  7. import org.springframework.stereotype.Component;
  8. import cn.dev33.satoken.SaManager;
  9. import cn.dev33.satoken.fun.SaFunction;
  10. import cn.dev33.satoken.session.SaSession;
  11. import cn.dev33.satoken.stp.SaLoginModel;
  12. import cn.dev33.satoken.stp.SaTokenInfo;
  13. import cn.dev33.satoken.stp.StpLogic;
  14. import cn.dev33.satoken.stp.StpUtil;
  15. /**
  16. * Sa-Token 权限认证工具类 (User版本)
  17. *
  18. * @author kong
  19. */
  20. @Component
  21. public class StpUserUtil {
  22. /**
  23. * 账号类型标识
  24. */
  25. public static final String TYPE = "user";
  26. /**
  27. * 底层的 StpLogic 对象
  28. */
  29. public static StpLogic stpLogic = new StpLogic(TYPE);
  30. /**
  31. * 获取当前 StpLogic 的账号类型
  32. *
  33. * @return See Note
  34. */
  35. public static String getLoginType() {
  36. return stpLogic.getLoginType();
  37. }
  38. public static void saveAdmin(Long loginId, SpAdmin spAdmin) {
  39. String key = "admin:" + loginId;
  40. RedisUtil.set(key, JSONUtil.toJsonStr(spAdmin));
  41. }
  42. public static SpAdmin getAdmin() {
  43. String key = "admin:" + StpUtil.getLoginIdAsLong();
  44. String adminJson = RedisUtil.get(key);
  45. return JSONUtil.toBean(adminJson, SpAdmin.class);
  46. }
  47. public static void setLoginName(String name, String phone) {
  48. String key = "login_user:" + StpUtil.getLoginIdAsString();
  49. JSONObject jsonObject = new JSONObject();
  50. jsonObject.set("name", name).set("phone", phone);
  51. RedisUtil.set(key, JSONUtil.toJsonStr(jsonObject));
  52. }
  53. public static String getLoginName() {
  54. try {
  55. String key = "login_user:" + StpUtil.getLoginIdAsString();
  56. String cacheObJ = RedisUtil.get(key);
  57. return JSONUtil.parseObj(cacheObJ).getStr("name");
  58. } catch (Exception e) {
  59. return "";
  60. }
  61. }
  62. public static String getCustomerId() {
  63. SpAdmin admin = getAdmin();
  64. return getAdmin().getCustomerId();
  65. }
  66. /**
  67. * 重置 StpLogic 对象
  68. *
  69. * @param stpLogic /
  70. */
  71. public static void setStpLogic(StpLogic stpLogic) {
  72. StpUtil.stpLogic = stpLogic;
  73. // 防止自定义 stpLogic 被覆盖
  74. SaManager.putStpLogic(stpLogic);
  75. }
  76. // =================== 获取token 相关 ===================
  77. /**
  78. * 返回token名称
  79. *
  80. * @return 此StpLogic的token名称
  81. */
  82. public static String getTokenName() {
  83. return stpLogic.getTokenName();
  84. }
  85. /**
  86. * 在当前会话写入当前TokenValue
  87. *
  88. * @param tokenValue token值
  89. * @param cookieTimeout Cookie存活时间(秒)
  90. */
  91. public static void setTokenValue(String tokenValue, int cookieTimeout) {
  92. stpLogic.setTokenValue(tokenValue, cookieTimeout);
  93. }
  94. /**
  95. * 获取当前TokenValue
  96. *
  97. * @return 当前tokenValue
  98. */
  99. public static String getTokenValue() {
  100. return stpLogic.getTokenValue();
  101. }
  102. /**
  103. * 获取当前会话的Token信息
  104. *
  105. * @return token信息
  106. */
  107. public static SaTokenInfo getTokenInfo() {
  108. return stpLogic.getTokenInfo();
  109. }
  110. // =================== 登录相关操作 ===================
  111. // --- 登录
  112. /**
  113. * 会话登录
  114. *
  115. * @param id 账号id,建议的类型:(long | int | String)
  116. */
  117. public static void login(Object id) {
  118. stpLogic.login(id);
  119. }
  120. /**
  121. * 会话登录,并指定登录设备
  122. *
  123. * @param id 账号id,建议的类型:(long | int | String)
  124. * @param device 设备标识
  125. */
  126. public static void login(Object id, String device) {
  127. stpLogic.login(id, device);
  128. }
  129. /**
  130. * 会话登录,并指定是否 [记住我]
  131. *
  132. * @param id 账号id,建议的类型:(long | int | String)
  133. * @param isLastingCookie 是否为持久Cookie
  134. */
  135. public static void login(Object id, boolean isLastingCookie) {
  136. stpLogic.login(id, isLastingCookie);
  137. }
  138. /**
  139. * 会话登录,并指定所有登录参数Model
  140. *
  141. * @param id 登录id,建议的类型:(long | int | String)
  142. * @param loginModel 此次登录的参数Model
  143. */
  144. public static void login(Object id, SaLoginModel loginModel) {
  145. stpLogic.login(id, loginModel);
  146. }
  147. // --- 注销
  148. /**
  149. * 会话注销
  150. */
  151. public static void logout() {
  152. stpLogic.logout();
  153. }
  154. /**
  155. * 会话注销,根据账号id
  156. *
  157. * @param loginId 账号id
  158. */
  159. public static void logout(Object loginId) {
  160. stpLogic.logout(loginId);
  161. }
  162. /**
  163. * 会话注销,根据账号id 和 设备标识
  164. *
  165. * @param loginId 账号id
  166. * @param device 设备标识 (填null代表所有注销设备)
  167. */
  168. public static void logout(Object loginId, String device) {
  169. stpLogic.logout(loginId, device);
  170. }
  171. /**
  172. * 会话注销,根据指定 Token
  173. *
  174. * @param tokenValue 指定token
  175. */
  176. public static void logoutByTokenValue(String tokenValue) {
  177. stpLogic.logoutByTokenValue(tokenValue);
  178. }
  179. /**
  180. * 踢人下线,根据账号id
  181. * <p> 当对方再次访问系统时,会抛出NotLoginException异常,场景值=-5 </p>
  182. *
  183. * @param loginId 账号id
  184. */
  185. public static void kickout(Object loginId) {
  186. stpLogic.kickout(loginId);
  187. }
  188. /**
  189. * 踢人下线,根据账号id 和 设备标识
  190. * <p> 当对方再次访问系统时,会抛出NotLoginException异常,场景值=-5 </p>
  191. *
  192. * @param loginId 账号id
  193. * @param device 设备标识 (填null代表踢出所有设备)
  194. */
  195. public static void kickout(Object loginId, String device) {
  196. stpLogic.kickout(loginId, device);
  197. }
  198. /**
  199. * 踢人下线,根据指定 Token
  200. * <p> 当对方再次访问系统时,会抛出NotLoginException异常,场景值=-5 </p>
  201. *
  202. * @param tokenValue 指定token
  203. */
  204. public static void kickoutByTokenValue(String tokenValue) {
  205. stpLogic.kickoutByTokenValue(tokenValue);
  206. }
  207. /**
  208. * 顶人下线,根据账号id 和 设备标识
  209. * <p> 当对方再次访问系统时,会抛出NotLoginException异常,场景值=-4 </p>
  210. *
  211. * @param loginId 账号id
  212. * @param device 设备标识 (填null代表顶替所有设备)
  213. */
  214. public static void replaced(Object loginId, String device) {
  215. stpLogic.replaced(loginId, device);
  216. }
  217. // 查询相关
  218. /**
  219. * 当前会话是否已经登录
  220. *
  221. * @return 是否已登录
  222. */
  223. public static boolean isLogin() {
  224. return stpLogic.isLogin();
  225. }
  226. /**
  227. * 检验当前会话是否已经登录,如未登录,则抛出异常
  228. */
  229. public static void checkLogin() {
  230. stpLogic.checkLogin();
  231. }
  232. /**
  233. * 获取当前会话账号id, 如果未登录,则抛出异常
  234. *
  235. * @return 账号id
  236. */
  237. public static Object getLoginId() {
  238. return stpLogic.getLoginId();
  239. }
  240. /**
  241. * 获取当前会话账号id, 如果未登录,则返回默认值
  242. *
  243. * @param <T> 返回类型
  244. * @param defaultValue 默认值
  245. * @return 登录id
  246. */
  247. public static <T> T getLoginId(T defaultValue) {
  248. return stpLogic.getLoginId(defaultValue);
  249. }
  250. /**
  251. * 获取当前会话账号id, 如果未登录,则返回null
  252. *
  253. * @return 账号id
  254. */
  255. public static Object getLoginIdDefaultNull() {
  256. return stpLogic.getLoginIdDefaultNull();
  257. }
  258. /**
  259. * 获取当前会话账号id, 并转换为String类型
  260. *
  261. * @return 账号id
  262. */
  263. public static String getLoginIdAsString() {
  264. return stpLogic.getLoginIdAsString();
  265. }
  266. /**
  267. * 获取当前会话账号id, 并转换为int类型
  268. *
  269. * @return 账号id
  270. */
  271. public static int getLoginIdAsInt() {
  272. return stpLogic.getLoginIdAsInt();
  273. }
  274. /**
  275. * 获取当前会话账号id, 并转换为long类型
  276. *
  277. * @return 账号id
  278. */
  279. public static long getLoginIdAsLong() {
  280. return stpLogic.getLoginIdAsLong();
  281. }
  282. /**
  283. * 获取指定Token对应的账号id,如果未登录,则返回 null
  284. *
  285. * @param tokenValue token
  286. * @return 账号id
  287. */
  288. public static Object getLoginIdByToken(String tokenValue) {
  289. return stpLogic.getLoginIdByToken(tokenValue);
  290. }
  291. // =================== User-Session 相关 ===================
  292. /**
  293. * 获取指定账号id的Session, 如果Session尚未创建,isCreate=是否新建并返回
  294. *
  295. * @param loginId 账号id
  296. * @param isCreate 是否新建
  297. * @return Session对象
  298. */
  299. public static SaSession getSessionByLoginId(Object loginId, boolean isCreate) {
  300. return stpLogic.getSessionByLoginId(loginId, isCreate);
  301. }
  302. /**
  303. * 获取指定key的Session, 如果Session尚未创建,则返回null
  304. *
  305. * @param sessionId SessionId
  306. * @return Session对象
  307. */
  308. public static SaSession getSessionBySessionId(String sessionId) {
  309. return stpLogic.getSessionBySessionId(sessionId);
  310. }
  311. /**
  312. * 获取指定账号id的Session,如果Session尚未创建,则新建并返回
  313. *
  314. * @param loginId 账号id
  315. * @return Session对象
  316. */
  317. public static SaSession getSessionByLoginId(Object loginId) {
  318. return stpLogic.getSessionByLoginId(loginId);
  319. }
  320. /**
  321. * 获取当前会话的Session, 如果Session尚未创建,isCreate=是否新建并返回
  322. *
  323. * @param isCreate 是否新建
  324. * @return Session对象
  325. */
  326. public static SaSession getSession(boolean isCreate) {
  327. return stpLogic.getSession(isCreate);
  328. }
  329. /**
  330. * 获取当前会话的Session,如果Session尚未创建,则新建并返回
  331. *
  332. * @return Session对象
  333. */
  334. public static SaSession getSession() {
  335. return stpLogic.getSession();
  336. }
  337. // =================== Token-Session 相关 ===================
  338. /**
  339. * 获取指定Token-Session,如果Session尚未创建,则新建并返回
  340. *
  341. * @param tokenValue Token值
  342. * @return Session对象
  343. */
  344. public static SaSession getTokenSessionByToken(String tokenValue) {
  345. return stpLogic.getTokenSessionByToken(tokenValue);
  346. }
  347. /**
  348. * 获取当前Token-Session,如果Session尚未创建,则新建并返回
  349. *
  350. * @return Session对象
  351. */
  352. public static SaSession getTokenSession() {
  353. return stpLogic.getTokenSession();
  354. }
  355. // =================== [临时过期] 验证相关 ===================
  356. /**
  357. * 检查当前token 是否已经[临时过期],如果已经过期则抛出异常
  358. */
  359. public static void checkActivityTimeout() {
  360. stpLogic.checkActivityTimeout();
  361. }
  362. /**
  363. * 续签当前token:(将 [最后操作时间] 更新为当前时间戳)
  364. * <h1>请注意: 即时token已经 [临时过期] 也可续签成功,
  365. * 如果此场景下需要提示续签失败,可在此之前调用 checkActivityTimeout() 强制检查是否过期即可 </h1>
  366. */
  367. public static void updateLastActivityToNow() {
  368. stpLogic.updateLastActivityToNow();
  369. }
  370. // =================== 过期时间相关 ===================
  371. /**
  372. * 获取当前登录者的 token 剩余有效时间 (单位: 秒)
  373. *
  374. * @return token剩余有效时间
  375. */
  376. public static long getTokenTimeout() {
  377. return stpLogic.getTokenTimeout();
  378. }
  379. /**
  380. * 获取当前登录者的 User-Session 剩余有效时间 (单位: 秒)
  381. *
  382. * @return token剩余有效时间
  383. */
  384. public static long getSessionTimeout() {
  385. return stpLogic.getSessionTimeout();
  386. }
  387. /**
  388. * 获取当前 Token-Session 剩余有效时间 (单位: 秒)
  389. *
  390. * @return token剩余有效时间
  391. */
  392. public static long getTokenSessionTimeout() {
  393. return stpLogic.getTokenSessionTimeout();
  394. }
  395. /**
  396. * 获取当前 token [临时过期] 剩余有效时间 (单位: 秒)
  397. *
  398. * @return token [临时过期] 剩余有效时间
  399. */
  400. public static long getTokenActivityTimeout() {
  401. return stpLogic.getTokenActivityTimeout();
  402. }
  403. // =================== 角色验证操作 ===================
  404. /**
  405. * 获取:当前账号的角色集合
  406. *
  407. * @return /
  408. */
  409. public static List<String> getRoleList() {
  410. return stpLogic.getRoleList();
  411. }
  412. /**
  413. * 获取:指定账号的角色集合
  414. *
  415. * @param loginId 指定账号id
  416. * @return /
  417. */
  418. public static List<String> getRoleList(Object loginId) {
  419. return stpLogic.getRoleList(loginId);
  420. }
  421. /**
  422. * 判断:当前账号是否拥有指定角色, 返回true或false
  423. *
  424. * @param role 角色标识
  425. * @return 是否含有指定角色标识
  426. */
  427. public static boolean hasRole(String role) {
  428. return stpLogic.hasRole(role);
  429. }
  430. /**
  431. * 判断:指定账号是否含有指定角色标识, 返回true或false
  432. *
  433. * @param loginId 账号id
  434. * @param role 角色标识
  435. * @return 是否含有指定角色标识
  436. */
  437. public static boolean hasRole(Object loginId, String role) {
  438. return stpLogic.hasRole(loginId, role);
  439. }
  440. /**
  441. * 判断:当前账号是否含有指定角色标识 [指定多个,必须全部验证通过]
  442. *
  443. * @param roleArray 角色标识数组
  444. * @return true或false
  445. */
  446. public static boolean hasRoleAnd(String... roleArray) {
  447. return stpLogic.hasRoleAnd(roleArray);
  448. }
  449. /**
  450. * 判断:当前账号是否含有指定角色标识 [指定多个,只要其一验证通过即可]
  451. *
  452. * @param roleArray 角色标识数组
  453. * @return true或false
  454. */
  455. public static boolean hasRoleOr(String... roleArray) {
  456. return stpLogic.hasRoleOr(roleArray);
  457. }
  458. /**
  459. * 校验:当前账号是否含有指定角色标识, 如果验证未通过,则抛出异常: NotRoleException
  460. *
  461. * @param role 角色标识
  462. */
  463. public static void checkRole(String role) {
  464. stpLogic.checkRole(role);
  465. }
  466. /**
  467. * 校验:当前账号是否含有指定角色标识 [指定多个,必须全部验证通过]
  468. *
  469. * @param roleArray 角色标识数组
  470. */
  471. public static void checkRoleAnd(String... roleArray) {
  472. stpLogic.checkRoleAnd(roleArray);
  473. }
  474. /**
  475. * 校验:当前账号是否含有指定角色标识 [指定多个,只要其一验证通过即可]
  476. *
  477. * @param roleArray 角色标识数组
  478. */
  479. public static void checkRoleOr(String... roleArray) {
  480. stpLogic.checkRoleOr(roleArray);
  481. }
  482. // =================== 权限验证操作 ===================
  483. /**
  484. * 获取:当前账号的权限码集合
  485. *
  486. * @return /
  487. */
  488. public static List<String> getPermissionList() {
  489. return stpLogic.getPermissionList();
  490. }
  491. /**
  492. * 获取:指定账号的权限码集合
  493. *
  494. * @param loginId 指定账号id
  495. * @return /
  496. */
  497. public static List<String> getPermissionList(Object loginId) {
  498. return stpLogic.getPermissionList(loginId);
  499. }
  500. /**
  501. * 判断:当前账号是否含有指定权限, 返回true或false
  502. *
  503. * @param permission 权限码
  504. * @return 是否含有指定权限
  505. */
  506. public static boolean hasPermission(String permission) {
  507. return stpLogic.hasPermission(permission);
  508. }
  509. /**
  510. * 判断:指定账号id是否含有指定权限, 返回true或false
  511. *
  512. * @param loginId 账号id
  513. * @param permission 权限码
  514. * @return 是否含有指定权限
  515. */
  516. public static boolean hasPermission(Object loginId, String permission) {
  517. return stpLogic.hasPermission(loginId, permission);
  518. }
  519. /**
  520. * 判断:当前账号是否含有指定权限, [指定多个,必须全部具有]
  521. *
  522. * @param permissionArray 权限码数组
  523. * @return true 或 false
  524. */
  525. public static boolean hasPermissionAnd(String... permissionArray) {
  526. return stpLogic.hasPermissionAnd(permissionArray);
  527. }
  528. /**
  529. * 判断:当前账号是否含有指定权限 [指定多个,只要其一验证通过即可]
  530. *
  531. * @param permissionArray 权限码数组
  532. * @return true 或 false
  533. */
  534. public static boolean hasPermissionOr(String... permissionArray) {
  535. return stpLogic.hasPermissionOr(permissionArray);
  536. }
  537. /**
  538. * 校验:当前账号是否含有指定权限, 如果验证未通过,则抛出异常: NotPermissionException
  539. *
  540. * @param permission 权限码
  541. */
  542. public static void checkPermission(String permission) {
  543. stpLogic.checkPermission(permission);
  544. }
  545. /**
  546. * 校验:当前账号是否含有指定权限 [指定多个,必须全部验证通过]
  547. *
  548. * @param permissionArray 权限码数组
  549. */
  550. public static void checkPermissionAnd(String... permissionArray) {
  551. stpLogic.checkPermissionAnd(permissionArray);
  552. }
  553. /**
  554. * 校验:当前账号是否含有指定权限 [指定多个,只要其一验证通过即可]
  555. *
  556. * @param permissionArray 权限码数组
  557. */
  558. public static void checkPermissionOr(String... permissionArray) {
  559. stpLogic.checkPermissionOr(permissionArray);
  560. }
  561. // =================== id 反查token 相关操作 ===================
  562. /**
  563. * 获取指定账号id的tokenValue
  564. * <p> 在配置为允许并发登录时,此方法只会返回队列的最后一个token,
  565. * 如果你需要返回此账号id的所有token,请调用 getTokenValueListByLoginId
  566. *
  567. * @param loginId 账号id
  568. * @return token值
  569. */
  570. public static String getTokenValueByLoginId(Object loginId) {
  571. return stpLogic.getTokenValueByLoginId(loginId);
  572. }
  573. /**
  574. * 获取指定账号id指定设备端的tokenValue
  575. * <p> 在配置为允许并发登录时,此方法只会返回队列的最后一个token,
  576. * 如果你需要返回此账号id的所有token,请调用 getTokenValueListByLoginId
  577. *
  578. * @param loginId 账号id
  579. * @param device 设备标识
  580. * @return token值
  581. */
  582. public static String getTokenValueByLoginId(Object loginId, String device) {
  583. return stpLogic.getTokenValueByLoginId(loginId, device);
  584. }
  585. /**
  586. * 获取指定账号id的tokenValue集合
  587. *
  588. * @param loginId 账号id
  589. * @return 此loginId的所有相关token
  590. */
  591. public static List<String> getTokenValueListByLoginId(Object loginId) {
  592. return stpLogic.getTokenValueListByLoginId(loginId);
  593. }
  594. /**
  595. * 获取指定账号id指定设备端的tokenValue 集合
  596. *
  597. * @param loginId 账号id
  598. * @param device 设备标识
  599. * @return 此loginId的所有相关token
  600. */
  601. public static List<String> getTokenValueListByLoginId(Object loginId, String device) {
  602. return stpLogic.getTokenValueListByLoginId(loginId, device);
  603. }
  604. /**
  605. * 返回当前会话的登录设备
  606. *
  607. * @return 当前令牌的登录设备
  608. */
  609. public static String getLoginDevice() {
  610. return stpLogic.getLoginDevice();
  611. }
  612. // =================== 会话管理 ===================
  613. /**
  614. * 根据条件查询Token
  615. *
  616. * @param keyword 关键字
  617. * @param start 开始处索引 (-1代表查询所有)
  618. * @param size 获取数量
  619. * @return token集合
  620. */
  621. public static List<String> searchTokenValue(String keyword, int start, int size) {
  622. return stpLogic.searchTokenValue(keyword, start, size);
  623. }
  624. /**
  625. * 根据条件查询SessionId
  626. *
  627. * @param keyword 关键字
  628. * @param start 开始处索引 (-1代表查询所有)
  629. * @param size 获取数量
  630. * @return sessionId集合
  631. */
  632. public static List<String> searchSessionId(String keyword, int start, int size) {
  633. return stpLogic.searchSessionId(keyword, start, size);
  634. }
  635. /**
  636. * 根据条件查询Token专属Session的Id
  637. *
  638. * @param keyword 关键字
  639. * @param start 开始处索引 (-1代表查询所有)
  640. * @param size 获取数量
  641. * @return sessionId集合
  642. */
  643. public static List<String> searchTokenSessionId(String keyword, int start, int size) {
  644. return stpLogic.searchTokenSessionId(keyword, start, size);
  645. }
  646. // ------------------- 账号封禁 -------------------
  647. /**
  648. * 封禁指定账号
  649. * <p> 此方法不会直接将此账号id踢下线,而是在对方再次登录时抛出`DisableLoginException`异常
  650. *
  651. * @param loginId 指定账号id
  652. * @param disableTime 封禁时间, 单位: 秒 (-1=永久封禁)
  653. */
  654. public static void disable(Object loginId, long disableTime) {
  655. stpLogic.disable(loginId, disableTime);
  656. }
  657. /**
  658. * 指定账号是否已被封禁 (true=已被封禁, false=未被封禁)
  659. *
  660. * @param loginId 账号id
  661. * @return see note
  662. */
  663. public static boolean isDisable(Object loginId) {
  664. return stpLogic.isDisable(loginId);
  665. }
  666. /**
  667. * 获取指定账号剩余封禁时间,单位:秒(-1=永久封禁,-2=未被封禁)
  668. *
  669. * @param loginId 账号id
  670. * @return see note
  671. */
  672. public static long getDisableTime(Object loginId) {
  673. return stpLogic.getDisableTime(loginId);
  674. }
  675. /**
  676. * 解封指定账号
  677. *
  678. * @param loginId 账号id
  679. */
  680. public static void untieDisable(Object loginId) {
  681. stpLogic.untieDisable(loginId);
  682. }
  683. // =================== 身份切换 ===================
  684. /**
  685. * 临时切换身份为指定账号id
  686. *
  687. * @param loginId 指定loginId
  688. */
  689. public static void switchTo(Object loginId) {
  690. stpLogic.switchTo(loginId);
  691. }
  692. /**
  693. * 结束临时切换身份
  694. */
  695. public static void endSwitch() {
  696. stpLogic.endSwitch();
  697. }
  698. /**
  699. * 当前是否正处于[身份临时切换]中
  700. *
  701. * @return 是否正处于[身份临时切换]中
  702. */
  703. public static boolean isSwitch() {
  704. return stpLogic.isSwitch();
  705. }
  706. /**
  707. * 在一个代码段里方法内,临时切换身份为指定账号id
  708. *
  709. * @param loginId 指定账号id
  710. * @param function 要执行的方法
  711. */
  712. public static void switchTo(Object loginId, SaFunction function) {
  713. stpLogic.switchTo(loginId, function);
  714. }
  715. // ------------------- 二级认证 -------------------
  716. /**
  717. * 在当前会话 开启二级认证
  718. *
  719. * @param safeTime 维持时间 (单位: 秒)
  720. */
  721. public static void openSafe(long safeTime) {
  722. stpLogic.openSafe(safeTime);
  723. }
  724. /**
  725. * 当前会话 是否处于二级认证时间内
  726. *
  727. * @return true=二级认证已通过, false=尚未进行二级认证或认证已超时
  728. */
  729. public static boolean isSafe() {
  730. return stpLogic.isSafe();
  731. }
  732. /**
  733. * 检查当前会话是否已通过二级认证,如未通过则抛出异常
  734. */
  735. public static void checkSafe() {
  736. stpLogic.checkSafe();
  737. }
  738. /**
  739. * 获取当前会话的二级认证剩余有效时间 (单位: 秒, 返回-2代表尚未通过二级认证)
  740. *
  741. * @return 剩余有效时间
  742. */
  743. public static long getSafeTime() {
  744. return stpLogic.getSafeTime();
  745. }
  746. /**
  747. * 在当前会话 结束二级认证
  748. */
  749. public static void closeSafe() {
  750. stpLogic.closeSafe();
  751. }
  752. // =================== 历史API,兼容旧版本 ===================
  753. /**
  754. * <h1> 本函数设计已过时,未来版本可能移除此函数,请及时更换为 StpUtil.getLoginType() ,使用方式保持不变 </h1>
  755. * <p>
  756. * 获取当前StpLogin的loginKey
  757. *
  758. * @return 当前StpLogin的loginKey
  759. */
  760. @Deprecated
  761. public static String getLoginKey() {
  762. return stpLogic.getLoginType();
  763. }
  764. /**
  765. * <h1> 本函数设计已过时,未来版本可能移除此函数,请及时更换为 StpUtil.login() ,使用方式保持不变 </h1>
  766. * <p>
  767. * 在当前会话上登录id
  768. *
  769. * @param loginId 登录id,建议的类型:(long | int | String)
  770. */
  771. @Deprecated
  772. public static void setLoginId(Object loginId) {
  773. stpLogic.login(loginId);
  774. }
  775. /**
  776. * <h1> 本函数设计已过时,未来版本可能移除此函数,请及时更换为 StpUtil.login() ,使用方式保持不变 </h1>
  777. * <p>
  778. * 在当前会话上登录id, 并指定登录设备
  779. *
  780. * @param loginId 登录id,建议的类型:(long | int | String)
  781. * @param device 设备标识
  782. */
  783. @Deprecated
  784. public static void setLoginId(Object loginId, String device) {
  785. stpLogic.login(loginId, device);
  786. }
  787. /**
  788. * <h1> 本函数设计已过时,未来版本可能移除此函数,请及时更换为 StpUtil.login() ,使用方式保持不变 </h1>
  789. * <p>
  790. * 在当前会话上登录id, 并指定登录设备
  791. *
  792. * @param loginId 登录id,建议的类型:(long | int | String)
  793. * @param isLastingCookie 是否为持久Cookie
  794. */
  795. @Deprecated
  796. public static void setLoginId(Object loginId, boolean isLastingCookie) {
  797. stpLogic.login(loginId, isLastingCookie);
  798. }
  799. /**
  800. * <h1> 本函数设计已过时,未来版本可能移除此函数,请及时更换为 StpUtil.login() ,使用方式保持不变 </h1>
  801. * <p>
  802. * 在当前会话上登录id, 并指定所有登录参数Model
  803. *
  804. * @param loginId 登录id,建议的类型:(long | int | String)
  805. * @param loginModel 此次登录的参数Model
  806. */
  807. @Deprecated
  808. public static void setLoginId(Object loginId, SaLoginModel loginModel) {
  809. stpLogic.login(loginId, loginModel);
  810. }
  811. /**
  812. * <h1> 本函数设计已过时,未来版本可能移除此函数,请及时更换为 StpUtil.kickout() ,使用方式保持不变 </h1>
  813. * <p>
  814. * 会话注销,根据账号id (踢人下线)
  815. * <p> 当对方再次访问系统时,会抛出NotLoginException异常,场景值=-2
  816. *
  817. * @param loginId 账号id
  818. */
  819. @Deprecated
  820. public static void logoutByLoginId(Object loginId) {
  821. stpLogic.kickout(loginId);
  822. }
  823. /**
  824. * <h1> 本函数设计已过时,未来版本可能移除此函数,请及时更换为 StpUtil.kickout() ,使用方式保持不变 </h1>
  825. * <p>
  826. * 会话注销,根据账号id and 设备标识 (踢人下线)
  827. * <p> 当对方再次访问系统时,会抛出NotLoginException异常,场景值=-2 </p>
  828. *
  829. * @param loginId 账号id
  830. * @param device 设备标识 (填null代表所有注销设备)
  831. */
  832. @Deprecated
  833. public static void logoutByLoginId(Object loginId, String device) {
  834. stpLogic.kickout(loginId, device);
  835. }
  836. }