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

@ -26,18 +26,18 @@
</dependency> </dependency>
<!-- 开发测试 --> <!-- 开发测试 -->
<!-- <dependency> <dependency>
<groupId>cn.dev33</groupId> <groupId>cn.dev33</groupId>
<artifactId>sa-token-dev</artifactId> <artifactId>sa-token-dev</artifactId>
<version>1.5.1</version> <version>1.5.1</version>
</dependency> --> </dependency>
<!-- sa-token 权限认证, 在线文档http://sa-token.dev33.cn/ --> <!-- sa-token 权限认证, 在线文档http://sa-token.dev33.cn/ -->
<dependency> <!-- <dependency>
<groupId>cn.dev33</groupId> <groupId>cn.dev33</groupId>
<artifactId>sa-token</artifactId> <artifactId>sa-token</artifactId>
<version>1.5.1</version> <version>1.5.1</version>
</dependency> </dependency> -->
<!-- SpringBoot整合redis --> <!-- SpringBoot整合redis -->
<dependency> <dependency>
@ -46,6 +46,13 @@
<version>RELEASE</version> <version>RELEASE</version>
</dependency> </dependency>
<!-- @ConfigurationProperties -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
</dependencies> </dependencies>

View File

@ -13,7 +13,6 @@ public class SaTokenDemoApplication {
public static void main(String[] args) { public static void main(String[] args) {
SpringApplication.run(SaTokenDemoApplication.class, args); SpringApplication.run(SaTokenDemoApplication.class, args);
System.out.println("启动成功sa-token配置如下" + SaTokenManager.getConfig()); System.out.println("启动成功sa-token配置如下" + SaTokenManager.getConfig());
// StpUtil.getSessionByLoginId(10001)
} }

View File

@ -0,0 +1,21 @@
package com.pj.satoken;
import org.springframework.stereotype.Component;
import cn.dev33.satoken.action.SaTokenActionDefaultImpl;
/**
* 继承sa-token行为Bean默认实现, 重写部分逻辑
* @author kong
*
*/
@Component
public class MySaTokenAction extends SaTokenActionDefaultImpl {
// 重写token生成策略
// @Override
// public String createToken(Object loginId, String loginKey) {
// return SaTokenInsideUtil.getRandomString(60);
// }
}

View File

@ -1,8 +1,6 @@
package com.pj.satoken; package com.pj.satoken;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@ -16,8 +14,8 @@ import cn.dev33.satoken.config.SaTokenConfig;
public class MySaTokenConfig implements WebMvcConfigurer { public class MySaTokenConfig implements WebMvcConfigurer {
// 获取配置Bean (以代码的方式配置sa-token, 此配置会覆盖yml中的配置 ) // 获取配置Bean (以代码的方式配置sa-token, 此配置会覆盖yml中的配置 )
@Primary // @Primary
@Bean(name="MySaTokenConfig") // @Bean(name="MySaTokenConfig")
public SaTokenConfig getSaTokenConfig() { public SaTokenConfig getSaTokenConfig() {
SaTokenConfig config = new SaTokenConfig(); SaTokenConfig config = new SaTokenConfig();
config.setTokenName("satoken"); // token名称 (同时也是cookie名称) config.setTokenName("satoken"); // token名称 (同时也是cookie名称)
@ -26,6 +24,7 @@ public class MySaTokenConfig implements WebMvcConfigurer {
config.setIsReadBody(true); // 是否尝试从请求体里读取token config.setIsReadBody(true); // 是否尝试从请求体里读取token
config.setIsReadHead(true); // 是否尝试从header里读取token config.setIsReadHead(true); // 是否尝试从header里读取token
config.setIsReadCookie(true); // 是否尝试从cookie里读取token config.setIsReadCookie(true); // 是否尝试从cookie里读取token
config.setTokenStyle("uuid"); // token风格
config.setIsV(true); // 是否在初始化配置时打印版本字符画 config.setIsV(true); // 是否在初始化配置时打印版本字符画
return config; return config;
} }

View File

@ -17,6 +17,8 @@ spring:
is-read-head: true is-read-head: true
# 是否尝试从cookie里读取token # 是否尝试从cookie里读取token
is-read-cookie: true is-read-cookie: true
# token风格
token-style: uuid
# 是否在初始化配置时打印版本字符画 # 是否在初始化配置时打印版本字符画
is-v: true is-v: true

View File

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

View File

@ -5,6 +5,8 @@ import java.util.UUID;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import cn.dev33.satoken.SaTokenManager;
import cn.dev33.satoken.util.SaTokenInsideUtil;
import cn.dev33.satoken.util.SpringMvcUtil; import cn.dev33.satoken.util.SpringMvcUtil;
/** /**
@ -37,8 +39,37 @@ public class SaTokenActionDefaultImpl implements SaTokenAction {
*/ */
@Override @Override
public String createToken(Object loginId, String loginKey) { public String createToken(Object loginId, String loginKey) {
// 生成各种花式token
String tokenStyle = SaTokenManager.getConfig().getTokenStyle();
// uuid
if(tokenStyle.equals("uuid")) {
return UUID.randomUUID().toString(); 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 isReadBody = true; // 是否尝试从请求体里读取token
private Boolean isReadHead = true; // 是否尝试从header里读取token private Boolean isReadHead = true; // 是否尝试从header里读取token
private Boolean isReadCookie = true; // 是否尝试从cookie里读取token private Boolean isReadCookie = true; // 是否尝试从cookie里读取token
private String tokenStyle = "uuid"; // token风格
private Boolean isV = true; // 是否在初始化配置时打印版本字符画 private Boolean isV = true; // 是否在初始化配置时打印版本字符画
@ -103,6 +104,20 @@ public class SaTokenConfig {
this.isReadBody = isReadBody; this.isReadBody = isReadBody;
} }
/**
* @return tokenStyle
*/
public String getTokenStyle() {
return tokenStyle;
}
/**
* @param tokenStyle 要设置的 tokenStyle
*/
public void setTokenStyle(String tokenStyle) {
this.tokenStyle = tokenStyle;
}
/** /**
* @return isV * @return isV
*/ */
@ -124,7 +139,7 @@ public class SaTokenConfig {
public String toString() { public String toString() {
return "SaTokenConfig [tokenName=" + tokenName + ", timeout=" + timeout + ", isShare=" + isShare return "SaTokenConfig [tokenName=" + tokenName + ", timeout=" + timeout + ", isShare=" + isShare
+ ", isReadBody=" + isReadBody + ", isReadHead=" + isReadHead + ", isReadCookie=" + isReadCookie + ", isReadBody=" + isReadBody + ", isReadHead=" + isReadHead + ", isReadCookie=" + isReadCookie
+ ", isV=" + isV + "]"; + ", tokenStyle=" + tokenStyle + ", isV=" + isV + "]";
} }
@ -135,4 +150,8 @@ public class SaTokenConfig {
} }

View File

@ -6,7 +6,9 @@ import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import cn.dev33.satoken.SaTokenManager; import cn.dev33.satoken.SaTokenManager;
import cn.dev33.satoken.action.SaTokenAction;
import cn.dev33.satoken.config.SaTokenConfig; import cn.dev33.satoken.config.SaTokenConfig;
import cn.dev33.satoken.cookie.SaCookieOper;
import cn.dev33.satoken.dao.SaTokenDao; import cn.dev33.satoken.dao.SaTokenDao;
import cn.dev33.satoken.stp.StpInterface; import cn.dev33.satoken.stp.StpInterface;
@ -56,5 +58,23 @@ public class SpringSaToken {
SaTokenManager.setStp(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; package cn.dev33.satoken.util;
import java.util.Random;
/** /**
* sa-token 工具类 * sa-token 工具类
* @author kong * @author kong
@ -36,5 +38,21 @@ public class SaTokenInsideUtil {
*/ */
public static final String JUST_CREATED_SAVE_KEY = "JUST_CREATED_SAVE_KEY_"; 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();
}
} }