StpAdminUtil.java 27 KB

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