v1.6.0新特性:提供花式token生成方案

This commit is contained in:
shengzhang
2020-12-17 02:19:56 +08:00
parent 983af6691e
commit 235e9afcd3
10 changed files with 129 additions and 13 deletions

View File

@@ -105,14 +105,14 @@ public class SaTokenManager {
public static SaCookieOper saCookieOper;
public static SaCookieOper getSaCookieOper() {
if (saCookieOper == null) {
initgetSaCookieOper();
initSaCookieOper();
}
return saCookieOper;
}
public static void setSaCookieOper(SaCookieOper saCookieOper) {
SaTokenManager.saCookieOper = saCookieOper;
}
public synchronized static void initgetSaCookieOper() {
public synchronized static void initSaCookieOper() {
if (saCookieOper == null) {
setSaCookieOper(new SaCookieOperDefaultImpl());
}

View File

@@ -5,6 +5,8 @@ import java.util.UUID;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import cn.dev33.satoken.SaTokenManager;
import cn.dev33.satoken.util.SaTokenInsideUtil;
import cn.dev33.satoken.util.SpringMvcUtil;
/**
@@ -37,7 +39,36 @@ public class SaTokenActionDefaultImpl implements SaTokenAction {
*/
@Override
public String createToken(Object loginId, String loginKey) {
return UUID.randomUUID().toString();
// 生成各种花式token
String tokenStyle = SaTokenManager.getConfig().getTokenStyle();
// uuid
if(tokenStyle.equals("uuid")) {
return UUID.randomUUID().toString();
}
// 简单uuid (不带下划线)
else if(tokenStyle.equals("simple-uuid")) {
return UUID.randomUUID().toString().replaceAll("-", "");
}
// 32位随机字符串
else if(tokenStyle.equals("random-32")) {
return SaTokenInsideUtil.getRandomString(32);
}
// 64位随机字符串
else if(tokenStyle.equals("random-64")) {
return SaTokenInsideUtil.getRandomString(64);
}
// 128位随机字符串
else if(tokenStyle.equals("random-128")) {
return SaTokenInsideUtil.getRandomString(128);
}
// tik风格
else if(tokenStyle.equals("tik")) {
return SaTokenInsideUtil.getRandomString(2) + "_" + SaTokenInsideUtil.getRandomString(14) + "_" + SaTokenInsideUtil.getRandomString(16) + "__";
}
// 默认
else {
return UUID.randomUUID().toString();
}
}

View File

@@ -13,6 +13,7 @@ public class SaTokenConfig {
private Boolean isReadBody = true; // 是否尝试从请求体里读取token
private Boolean isReadHead = true; // 是否尝试从header里读取token
private Boolean isReadCookie = true; // 是否尝试从cookie里读取token
private String tokenStyle = "uuid"; // token风格
private Boolean isV = true; // 是否在初始化配置时打印版本字符画
@@ -102,7 +103,21 @@ public class SaTokenConfig {
public void setIsReadBody(Boolean isReadBody) {
this.isReadBody = isReadBody;
}
/**
* @return tokenStyle
*/
public String getTokenStyle() {
return tokenStyle;
}
/**
* @param tokenStyle 要设置的 tokenStyle
*/
public void setTokenStyle(String tokenStyle) {
this.tokenStyle = tokenStyle;
}
/**
* @return isV
*/
@@ -124,12 +139,16 @@ public class SaTokenConfig {
public String toString() {
return "SaTokenConfig [tokenName=" + tokenName + ", timeout=" + timeout + ", isShare=" + isShare
+ ", isReadBody=" + isReadBody + ", isReadHead=" + isReadHead + ", isReadCookie=" + isReadCookie
+ ", isV=" + isV + "]";
+ ", tokenStyle=" + tokenStyle + ", isV=" + isV + "]";
}

View File

@@ -6,7 +6,9 @@ import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;
import cn.dev33.satoken.SaTokenManager;
import cn.dev33.satoken.action.SaTokenAction;
import cn.dev33.satoken.config.SaTokenConfig;
import cn.dev33.satoken.cookie.SaCookieOper;
import cn.dev33.satoken.dao.SaTokenDao;
import cn.dev33.satoken.stp.StpInterface;
@@ -55,6 +57,24 @@ public class SpringSaToken {
public void setStp(StpInterface stp){
SaTokenManager.setStp(stp);
}
/**
* 注入Cookie操作Bean
* @param saCookieOper .
*/
@Autowired(required = false)
public void setSaCookieOper(SaCookieOper saCookieOper){
SaTokenManager.setSaCookieOper(saCookieOper);
}
/**
* 注入框架行为Bean
* @param sta .
*/
@Autowired(required = false)
public void setSta(SaTokenAction sta){
SaTokenManager.setSta(sta);
}
}

View File

@@ -1,5 +1,7 @@
package cn.dev33.satoken.util;
import java.util.Random;
/**
* sa-token 工具类
* @author kong
@@ -36,5 +38,21 @@ public class SaTokenInsideUtil {
*/
public static final String JUST_CREATED_SAVE_KEY = "JUST_CREATED_SAVE_KEY_";
/**
* 生成指定长度的随机字符串
* @param length 字符串的长度
* @return 一个随机字符串
*/
public static String getRandomString(int length) {
String str = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
Random random = new Random();
StringBuffer sb = new StringBuffer();
for (int i = 0; i < length; i++) {
int number = random.nextInt(62);
sb.append(str.charAt(number));
}
return sb.toString();
}
}