mirror of
https://gitee.com/dromara/sa-token.git
synced 2025-12-20 03:49:45 +08:00
Merge branch 'dev' of github.com:dromara/sa-token into dev
This commit is contained in:
@@ -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) + ")");
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -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"));
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 从集合里查询数据
|
* 从集合里查询数据
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user