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

View File

@ -13,7 +13,6 @@ public class SaTokenDemoApplication {
public static void main(String[] args) {
SpringApplication.run(SaTokenDemoApplication.class, args);
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;
import org.springframework.context.annotation.Bean;
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.WebMvcConfigurer;
@ -16,8 +14,8 @@ import cn.dev33.satoken.config.SaTokenConfig;
public class MySaTokenConfig implements WebMvcConfigurer {
// 获取配置Bean (以代码的方式配置sa-token, 此配置会覆盖yml中的配置 )
@Primary
@Bean(name="MySaTokenConfig")
// @Primary
// @Bean(name="MySaTokenConfig")
public SaTokenConfig getSaTokenConfig() {
SaTokenConfig config = new SaTokenConfig();
config.setTokenName("satoken"); // token名称 (同时也是cookie名称)
@ -26,6 +24,7 @@ public class MySaTokenConfig implements WebMvcConfigurer {
config.setIsReadBody(true); // 是否尝试从请求体里读取token
config.setIsReadHead(true); // 是否尝试从header里读取token
config.setIsReadCookie(true); // 是否尝试从cookie里读取token
config.setTokenStyle("uuid"); // token风格
config.setIsV(true); // 是否在初始化配置时打印版本字符画
return config;
}

View File

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

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();
}
}