diff --git a/sa-token-demo-springboot/pom.xml b/sa-token-demo-springboot/pom.xml index 622c8846..26420028 100644 --- a/sa-token-demo-springboot/pom.xml +++ b/sa-token-demo-springboot/pom.xml @@ -26,18 +26,18 @@ - + - + @@ -46,6 +46,13 @@ RELEASE + + + org.springframework.boot + spring-boot-configuration-processor + true + + diff --git a/sa-token-demo-springboot/src/main/java/com/pj/SaTokenDemoApplication.java b/sa-token-demo-springboot/src/main/java/com/pj/SaTokenDemoApplication.java index 436eaea0..1273ceb0 100644 --- a/sa-token-demo-springboot/src/main/java/com/pj/SaTokenDemoApplication.java +++ b/sa-token-demo-springboot/src/main/java/com/pj/SaTokenDemoApplication.java @@ -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) } diff --git a/sa-token-demo-springboot/src/main/java/com/pj/satoken/MySaTokenAction.java b/sa-token-demo-springboot/src/main/java/com/pj/satoken/MySaTokenAction.java new file mode 100644 index 00000000..7327f1d4 --- /dev/null +++ b/sa-token-demo-springboot/src/main/java/com/pj/satoken/MySaTokenAction.java @@ -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); +// } + +} diff --git a/sa-token-demo-springboot/src/main/java/com/pj/satoken/MySaTokenConfig.java b/sa-token-demo-springboot/src/main/java/com/pj/satoken/MySaTokenConfig.java index ec32e9d5..36b55d19 100644 --- a/sa-token-demo-springboot/src/main/java/com/pj/satoken/MySaTokenConfig.java +++ b/sa-token-demo-springboot/src/main/java/com/pj/satoken/MySaTokenConfig.java @@ -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; } diff --git a/sa-token-demo-springboot/src/main/resources/application.yml b/sa-token-demo-springboot/src/main/resources/application.yml index 393fd2e0..2018a8d9 100644 --- a/sa-token-demo-springboot/src/main/resources/application.yml +++ b/sa-token-demo-springboot/src/main/resources/application.yml @@ -17,6 +17,8 @@ spring: is-read-head: true # 是否尝试从cookie里读取token is-read-cookie: true + # token风格 + token-style: uuid # 是否在初始化配置时打印版本字符画 is-v: true diff --git a/sa-token-dev/src/main/java/cn/dev33/satoken/SaTokenManager.java b/sa-token-dev/src/main/java/cn/dev33/satoken/SaTokenManager.java index 380c3116..2071a412 100644 --- a/sa-token-dev/src/main/java/cn/dev33/satoken/SaTokenManager.java +++ b/sa-token-dev/src/main/java/cn/dev33/satoken/SaTokenManager.java @@ -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()); } diff --git a/sa-token-dev/src/main/java/cn/dev33/satoken/action/SaTokenActionDefaultImpl.java b/sa-token-dev/src/main/java/cn/dev33/satoken/action/SaTokenActionDefaultImpl.java index 98c742f8..b2132bbd 100644 --- a/sa-token-dev/src/main/java/cn/dev33/satoken/action/SaTokenActionDefaultImpl.java +++ b/sa-token-dev/src/main/java/cn/dev33/satoken/action/SaTokenActionDefaultImpl.java @@ -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(); + } } diff --git a/sa-token-dev/src/main/java/cn/dev33/satoken/config/SaTokenConfig.java b/sa-token-dev/src/main/java/cn/dev33/satoken/config/SaTokenConfig.java index 36738438..805e3b4e 100644 --- a/sa-token-dev/src/main/java/cn/dev33/satoken/config/SaTokenConfig.java +++ b/sa-token-dev/src/main/java/cn/dev33/satoken/config/SaTokenConfig.java @@ -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 + "]"; } + + + + diff --git a/sa-token-dev/src/main/java/cn/dev33/satoken/spring/SpringSaToken.java b/sa-token-dev/src/main/java/cn/dev33/satoken/spring/SpringSaToken.java index 4d5eb1b2..0d00e20c 100644 --- a/sa-token-dev/src/main/java/cn/dev33/satoken/spring/SpringSaToken.java +++ b/sa-token-dev/src/main/java/cn/dev33/satoken/spring/SpringSaToken.java @@ -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); + } } diff --git a/sa-token-dev/src/main/java/cn/dev33/satoken/util/SaTokenInsideUtil.java b/sa-token-dev/src/main/java/cn/dev33/satoken/util/SaTokenInsideUtil.java index c80b9eaa..138bb7aa 100644 --- a/sa-token-dev/src/main/java/cn/dev33/satoken/util/SaTokenInsideUtil.java +++ b/sa-token-dev/src/main/java/cn/dev33/satoken/util/SaTokenInsideUtil.java @@ -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(); + } + }