一直以来开发使用的框架要不就是shiro,要不就是spring security;最近听小伙伴说有个开源的权限框架SaToken十分好使,正好赶上开新项目,所以接入使用一下。
SaToken官网
接入流程十分简单,在官网上也有完整教程,有特殊接入需求的,也建议上官网查阅文档哈。
maven依赖
saToken默认将数据保存在内存中,但我这边选用的是存入Redis中,所以还需要在sa-token-spring-boot-starter的基础上引入sa-token-dao-redis-jackson和commons-pool2,如下:
<!-- Sa-Token 权限认证,在线文档:https://sa-token.cc -->
<dependency>
<groupId>cn.dev33</groupId>
<artifactId>sa-token-spring-boot-starter</artifactId>
<version>1.34.0</version>
</dependency>
<dependency>
<groupId>cn.dev33</groupId>
<artifactId>sa-token-dao-redis-jackson</artifactId>
<version>1.34.0</version>
</dependency>
<!-- 提供Redis连接池 -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
<version>2.6.2</version>
</dependency>
配置文件信息
我这边由于项目规范原因,配置使用的properties的形式,如需yaml形式,请自行上官网查阅哈
sa-token基础配置
# token名称 (同时也是cookie名称)
sa-token.token-name=mytoken
# token有效期,单位s 默认30天, -1代表永不过期
sa-token.timeout=2592000
# token临时有效期 (指定时间内无操作就视为token过期) 单位: 秒
sa-token.activity-timeout=-1
# 是否允许同一账号并发登录 (为true时允许一起登录, 为false时新登录挤掉旧登录)
sa-token.is-concurrent=true
# 在多人登录同一账号时,是否共用一个token (为true时所有登录共用一个token, 为false时每次登录新建一个token)
sa-token.is-share=true
# token风格
sa-token.token-style=uuid
# 是否输出操作日志
sa-token.is-log=false
因为使用了redis,所以还需要配置redis
# Redis数据库索引(默认为0)
spring.redis.database=1
# Redis服务器地址
spring.redis.host=127.0.0.1
# Redis服务器连接端口
spring.redis.port=6379
# Redis服务器连接密码(默认为空)
# spring.redis.password=my123456
# 连接超时时间
spring.redis.timeout=10s
# 连接池最大连接数
spring.redis.lettuce.pool.max-active=200
# 连接池最大阻塞等待时间(使用负值表示没有限制)
spring.redis.lettuce.pool.max-wait=-1ms
# 连接池中的最大空闲连接
spring.redis.lettuce.pool.max-idle=10
# 连接池中的最小空闲连接
spring.redis.lettuce.pool.min-idle=0
Config配置拦截及白名单
因为项目的请求路径规范以及引入了swagger的缘故,需要自行配置拦截和白名单,如下:
@Configuration
public class myAuthConfigure implements WebMvcConfigurer {
// 注册拦截器
@Override
public void addInterceptors(InterceptorRegistry registry) {
// 注册 Sa-Token 拦截器,校验规则为 StpUtil.checkLogin() 登录校验。
registry.addInterceptor(new SaInterceptor(handle -> StpUtil.checkLogin()))
.addPathPatterns("/**/swagger-ui.html","/**/swagger-resources/**",
"/**/swagger-ui/index.html","/**/swagger/**","/**/v*/api-docs","/webjars/springfox-swagger-ui/**")
.excludePathPatterns("/auth/login");
}
}
如果需要根据角色等等配置权限的话,可自行上官网查阅,saToken支持很灵活多样的配置。
主要使用方法
//登录
StpUtil.login(userId);
//登出
StpUtil.logout();
//获取当前是否登录
StpUtil.isLogin();
//检验当前会话是否已经登录
StpUtil.checkLogin();
简单使用的话,就这样就差不多了,需要深入使用的话,还是请移步官网查阅文档,官网文档十分之详细。