sa-token/sa-token-doc/doc/use/token-style.md
2020-12-18 00:39:14 +08:00

3.5 KiB
Raw Blame History

花式token

本篇介绍token生成的各种风格以及自定义token生成策略


内置风格

  • sa-token默认的token生成策略是uuid风格, 其模样类似于:623368f0-ae5e-4475-a53f-93e4225f16ae
  • 如果你对这种风格不太感冒还可以将token生成设置为其他风格
  • 怎么设置呢只需要在yml配置文件里设置 spring.sa-token.token-style=风格类型 即可,其有多种取值:
  1. token-style=uuiduuid风格 (默认风格)
	623368f0-ae5e-4475-a53f-93e4225f16ae
  1. token-style=simple-uuid同上uuid风格, 只不过去掉了下划线:
	6fd4221395024b5f87edd34bc3258ee8
  1. token-style=random-32随机32位字符串
	qEjyPsEA1Bkc9dr8YP6okFr5umCZNR6W
  1. token-style=random-64随机64位字符串
	v4ueNLEpPwMtmOPMBtOOeIQsvP8z9gkMgIVibTUVjkrNrlfra5CGwQkViDjO8jcc
  1. token-style=random-128随机128位字符串
	nojYPmcEtrFEaN0Otpssa8I8jpk8FO53UcMZkCP9qyoHaDbKS6dxoRPky9c6QlftQ0pdzxRGXsKZmUSrPeZBOD6kJFfmfgiRyUmYWcj4WU4SSP2ilakWN1HYnIuX0Olj
  1. token-style=tiktik风格
	gr_SwoIN0MC1ewxHX_vfCW3BothWDZMMtx__

自定义token生成策略

  • 如果你觉着以上风格都不是你喜欢的类型,那么你还可以自定义token生成策略来定制化token生成风格
  • 怎么做呢?只需要重写SaTokenAction接口的createToken方法即可

参考步骤如下:

  1. 新建文件MySaTokenAction.java,继承SaTokenActionDefaultImpl默认实现类, 并添加上注解@Component,保证此类被springboot扫描到
	package com.pj.satoken;

	import org.springframework.stereotype.Component;
	import cn.dev33.satoken.action.SaTokenActionDefaultImpl;

	/**
	 * 继承sa-token行为Bean默认实现, 重写部分逻辑 
	 */
	@Component
	public class MySaTokenAction extends SaTokenActionDefaultImpl {
		// 重写token生成策略 
		@Override
		public String createToken(Object loginId, String loginKey) {
			return SaTokenInsideUtil.getRandomString(60);	// 随机60位字符串
		}
	}
  1. 再次调用 StpUtil.setLoginId(10001)方法进行登录观察其生成的token样式
	gfuPSwZsnUhwgz08GTCH4wOgasWtc3odP4HLwXJ7NDGOximTvT4OlW19zeLH

以雪花算法生成token

在此再举一个例子,以自定义token生成策略的方式集成雪花算法来生成token

  1. 首先我们需要找一个合适的类库帮助我们生成雪花算法唯一id在此推荐 Hutool ,在pom.xml里添加依赖:
	<dependency>
	    <groupId>cn.hutool</groupId>
	    <artifactId>hutool-all</artifactId>
	    <version>5.5.4</version>
	</dependency>
  1. 同上,我们需要新建文件MySaTokenAction.java,继承SaTokenActionDefaultImpl默认实现类, 并添加上注解@Component,保证此类被springboot扫描到
	package com.pj.satoken;

	import org.springframework.stereotype.Component;
	import cn.dev33.satoken.action.SaTokenActionDefaultImpl;
	import cn.hutool.core.util.IdUtil;

	/**
	 * 继承sa-token行为Bean默认实现, 重写部分逻辑 
	 */
	@Component
	public class MySaTokenAction extends SaTokenActionDefaultImpl {
		// 重写token生成策略 
		@Override
		public String createToken(Object loginId, String loginKey) {
			return IdUtil.getSnowflake(1, 1).nextIdStr();	// 以雪花算法生成token 
		}
	}
  1. 再次调用 StpUtil.setLoginId(10001)方法进行登录观察其生成的token样式:
	1339604338175250432