StpUserUtil.java 27 KB

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