Merge branch 'dev' of github.com:dromara/sa-token into dev

This commit is contained in:
click33
2022-09-19 14:50:54 +08:00
4 changed files with 31 additions and 13 deletions

View File

@@ -1,6 +1,8 @@
package cn.dev33.satoken.listener; package cn.dev33.satoken.listener;
import java.util.Date; import java.time.Instant;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import cn.dev33.satoken.SaManager; import cn.dev33.satoken.SaManager;
import cn.dev33.satoken.stp.SaLoginModel; import cn.dev33.satoken.stp.SaLoginModel;
@@ -50,8 +52,9 @@ public class SaTokenListenerForConsolePrint implements SaTokenListener {
*/ */
@Override @Override
public void doDisable(String loginType, Object loginId, String service, int level, long disableTime) { public void doDisable(String loginType, Object loginId, String service, int level, long disableTime) {
Date date = new Date(System.currentTimeMillis() + disableTime * 1000); Instant instant = Instant.ofEpochMilli(System.currentTimeMillis() + disableTime * 1000);
println("账号[" + loginId + "] " + service + " 服务被封禁,封禁等级=" + level + " (解封时间: " + SaFoxUtil.formatDate(date) + ")"); ZonedDateTime zonedDateTime = ZonedDateTime.ofInstant(instant, ZoneId.systemDefault());
println("账号[" + loginId + "] " + service + " 服务被封禁,封禁等级=" + level + " (解封时间: " + SaFoxUtil.formatDate(zonedDateTime) + ")");
} }
/** /**

View File

@@ -4,6 +4,8 @@ import java.io.UnsupportedEncodingException;
import java.net.URLDecoder; import java.net.URLDecoder;
import java.net.URLEncoder; import java.net.URLEncoder;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collection; import java.util.Collection;
import java.util.Collections; import java.util.Collections;
@@ -109,6 +111,15 @@ public class SaFoxUtil {
public static String formatDate(Date date){ public static String formatDate(Date date){
return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(date); return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(date);
} }
/**
* 将日期格式化 yyyy-MM-dd HH:mm:ss
* @param zonedDateTime 日期
* @return 格式化后的时间
*/
public static String formatDate(ZonedDateTime zonedDateTime) {
return zonedDateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
}
/** /**
* 从集合里查询数据 * 从集合里查询数据

View File

@@ -47,9 +47,9 @@ StpUtil.logout(); // 会话注销
StpUtil.logout(10001); // 会话注销根据账号id StpUtil.logout(10001); // 会话注销根据账号id
StpUtil.logout(10001, "PC"); // 会话注销根据账号id 和 设备类型 StpUtil.logout(10001, "PC"); // 会话注销根据账号id 和 设备类型
StpUtil.logoutByTokenValue(token); // 指定 Token 强制注销 StpUtil.logoutByTokenValue(token); // 指定 Token 强制注销
StpUtil.kickout(10001); // 踢人下线 StpUtil.kickout(10001); // 踢人下线根据账号id
StpUtil.kickout(10001, "PC"); // 踢人下线根据账号id StpUtil.kickout(10001, "PC"); // 踢人下线根据账号id 和 设备类型
StpUtil.kickoutByTokenValue(token); // 踢人下线,根据账号id 和 设备类型 StpUtil.kickoutByTokenValue(token); // 踢人下线,根据token
``` ```
@@ -152,7 +152,7 @@ StpUtil.searchTokenSessionId(keyword, start, size, sortType); // 根据条件
### 11、账号封禁 ### 11、账号封禁
``` java ``` java
StpUtil.disable(10001, 1200); // 封禁:指定账号 StpUtil.disable(10001, 1200); // 封禁:指定账号 指定时间(单位s)
StpUtil.isDisable(10001); // 判断:指定账号是否已被封禁 (true=已被封禁, false=未被封禁) StpUtil.isDisable(10001); // 判断:指定账号是否已被封禁 (true=已被封禁, false=未被封禁)
StpUtil.checkDisable(10001); // 校验:指定账号是否已被封禁,如果被封禁则抛出异常 `DisableServiceException` StpUtil.checkDisable(10001); // 校验:指定账号是否已被封禁,如果被封禁则抛出异常 `DisableServiceException`
StpUtil.getDisableTime(10001); // 获取:指定账号剩余封禁时间,单位:秒(-1=永久封禁,-2=未被封禁) StpUtil.getDisableTime(10001); // 获取:指定账号剩余封禁时间,单位:秒(-1=永久封禁,-2=未被封禁)
@@ -160,9 +160,9 @@ StpUtil.untieDisable(loginId); // 解封:指定账号
``` ```
### 12、分类封禁 ### 12、分类封禁 (version >= 1.31.0)
``` java ``` java
StpUtil.disable(10001, "<业务标识>", 86400); // 封禁:指定账号的指定服务 StpUtil.disable(10001, "<业务标识>", 86400); // 封禁:指定账号的指定服务 指定时间(单位s)
StpUtil.isDisable(10001, "<业务标识>"); // 判断:指定账号的指定服务 是否已被封禁 (true=已被封禁, false=未被封禁) StpUtil.isDisable(10001, "<业务标识>"); // 判断:指定账号的指定服务 是否已被封禁 (true=已被封禁, false=未被封禁)
StpUtil.checkDisable(10001, "<业务标识>"); // 校验:指定账号的指定服务 是否已被封禁,如果被封禁则抛出异常 `DisableServiceException` StpUtil.checkDisable(10001, "<业务标识>"); // 校验:指定账号的指定服务 是否已被封禁,如果被封禁则抛出异常 `DisableServiceException`
StpUtil.getDisableTime(10001, "<业务标识>"); // 获取:指定账号的指定服务 剩余封禁时间,单位:秒(-1=永久封禁,-2=未被封禁) StpUtil.getDisableTime(10001, "<业务标识>"); // 获取:指定账号的指定服务 剩余封禁时间,单位:秒(-1=永久封禁,-2=未被封禁)
@@ -170,7 +170,7 @@ StpUtil.untieDisable(loginId, "<业务标识>"); // 解封:指定账号的
``` ```
### 13、阶梯封禁 ### 13、阶梯封禁 (version >= 1.31.0)
``` java ``` java
StpUtil.disableLevel(10001, "comment", 3, 10000); // 分类阶梯封禁,参数:封禁账号、封禁服务、封禁级别、封禁时间 StpUtil.disableLevel(10001, "comment", 3, 10000); // 分类阶梯封禁,参数:封禁账号、封禁服务、封禁级别、封禁时间
StpUtil.getDisableLevel(10001, "comment"); // 获取:指定账号的指定服务 封禁的级别 (如果此账号未被封禁则返回 -2 StpUtil.getDisableLevel(10001, "comment"); // 获取:指定账号的指定服务 封禁的级别 (如果此账号未被封禁则返回 -2

View File

@@ -1,8 +1,10 @@
package cn.dev33.satoken.core.util; package cn.dev33.satoken.core.util;
import java.time.Instant;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.Date;
import java.util.List; import java.util.List;
import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Assertions;
@@ -51,8 +53,10 @@ public class SaFoxUtilTest {
@Test @Test
public void formatDate() { public void formatDate() {
String formatDate = SaFoxUtil.formatDate(new Date(1644328600364L)); Instant instant = Instant.ofEpochMilli(1644328600364L);
Assertions.assertEquals(formatDate, "2022-02-08 21:56:40"); ZonedDateTime zonedDateTime = ZonedDateTime.ofInstant(instant, ZoneId.of("Asia/Shanghai"));
String formatDate = SaFoxUtil.formatDate(zonedDateTime);
Assertions.assertEquals(formatDate, "2022-02-08 21:56:40");
} }
@Test @Test