携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第8天,点击查看活动详情
大家好! 我是慕歌,一只想教你学习 Spring Boot的野生coder! 欢迎来到慕歌的 Sping boot系列教程,希望通过这个教程带大家搭建基础的 Spring Boot项目,该教程所有知识点均来源于本人的真实开发!
前言
在上一节中,慕歌介绍了如何在redis中如何使用redis ,并结合慕歌的开发经历简单介绍了redis 的使用场景,使用方式。Redis 作为一款高速缓存块,能实现的功能肯定不止如此,待我再总结一番为大家带来更加全面的使用介绍。这一节,我想介绍的开发框架是 Sa-token,见名知意这是一款高可用的权限认证框架,他带我们用最简化的配置完成用 spring security 需要进行大量配置的才能完成的工作。
Sa-Token 是一个轻量级 Java 权限认证框架,主要解决:登录认证、权限认证、单点登录、OAuth2.0、分布式Session会话、微服务网关鉴权 等一系列权限相关问题。
官网: sa-token.dev33.cn/
源码:gitee.com/dromara/sa-…
快速开发
在我们的基础开发版本中,我们只需要引入最基础依赖,现在的最新官方版本为:1.30.0 建议使用最新版本,如果在你的maven 仓库中没有该版本,需要替换maven 的镜像源
请参考
<!-- Sa-Token 权限认证, 在线文档:http://sa-token.dev33.cn/ -->
<dependency>
<groupId>cn.dev33</groupId>
<artifactId>sa-token-spring-boot-starter</artifactId>
<version>1.30.0</version>
</dependency>
配置依赖后需要配置spring boot本地自定义配置
# Sa-Token 配置
sa-token:
# token名称 (同时也是cookie名称)
token-name: satoken
# token有效期,单位s 默认30天, -1代表永不过期
timeout: 2592000
# token临时有效期 (指定时间内无操作就视为token过期) 单位: 秒
activity-timeout: -1
# 是否允许同一账号并发登录 (为true时允许一起登录, 为false时新登录挤掉旧登录)
is-concurrent: true
# 在多人登录同一账号时,是否共用一个token (为true时所有登录共用一个token, 为false时每次登录新建一个token)
is-share: true
# token风格
token-style: uuid
# 是否输出操作日志
is-log: false
按该配置,配置完成后即可完成基础的引入,这里主要配置token 的过期和作用范围。
token:服务端生成的一串加密字符串、以作客户端进行请求的一个“令牌”。. 当用户第一次使用账号密码成功进行登录后,服务器便生成一个Token及Token失效时间并将此返回给客户端,若成功登陆,以后客户端只需在有效时间内带上这个Token前来请求数据即可,无需再次带上用户名和密码。
基础使用
校验是否成功引入可在启动类下添加该语句
@SpringBootApplication
@EnableScheduling
public class CretApplication {
public static void main(String[] args) {
SpringApplication.run(CretApplication.class, args);
System.out.println("启动成功:Sa-Token配置如下:" + SaManager.getConfig());
}
}
当控制台输出我们的配置内容时,证明sa-token 的依赖已经引入,观察输出就会发现sa-token 已经为我们初始化了很多的配置,接下的使用就会非常的简单!
启动成功:Sa-Token配置如下:SaTokenConfig [tokenName=satoken, timeout=2592000, activityTimeout=-1, isConcurrent=true, isShare=true, maxLoginCount=12, isReadBody=true, isReadHead=true, isReadCookie=true, tokenStyle=uuid, dataRefreshPeriod=30, tokenSessionCheckLogin=true, autoRenew=true, tokenPrefix=null, isPrint=true, isLog=false, jwtSecretKey=null, idTokenTimeout=86400, basic=, currDomain=null, checkIdToken=false, cookie=SaCookieConfig [domain=null, path=null, secure=false, httpOnly=false, sameSite=null]]
作为一个权限校验开发框架,他的第一个动作便是针对我们的登录操作,在登录的时候便需要开始使用sa-token里面很强大的一个类‘ StpUtil.class’
// 会话登录:参数填写要登录的账号id,建议的数据类型:long | int | String,
不可以传入复杂类型,如:User、Admin 等等
StpUtil.login(Object id);
// 当前会话注销登录
StpUtil.logout();
// 获取当前会话是否已经登录,返回true=已登录,false=未登录
StpUtil.isLogin();
// 检验当前会话是否已经登录, 如果未登录,则抛出异常:`NotLoginException`
StpUtil.checkLogin();
只需要通过简单的一句登录,sa-token便已经为我们生成好权限校验的系列组件。如果你觉得这种代码方式的开发太繁琐,不是那么的清晰知道当前的权限,进行简单的校验,就可以开启注解方式的校验。注解式校验的配置如下:
@Configuration
public class SaTokenConfig implements WebMvcConfigurer {
// 注册Sa-Token的注解拦截器,打开注解式鉴权功能
@Override
public void addInterceptors(InterceptorRegistry registry) {
// 注册注解拦截器,并排除不需要注解鉴权的接口地址 (与登录拦截器无关)
registry.addInterceptor(new SaAnnotationInterceptor()).addPathPatterns("/**");
}
}
在开启拦截器后,我们即可实现注解式开发,像之前使用spring 注解一般。
// 检验当前会话是否已经登录
StpUtil.checkLogin();
//检验当前会话是否已经登录
@SaCheckLogin
这里的注解可直接放在一个接口上,这样当一个请求进来的时候sa-token 的拦截器会先从请求中获取自己注入 的标识 sa-token ,这个sa-token 里面包含了系列参数来保证登录的安全正确性。
结语
这一章的分享到这里就结束了,下一节中还将带来sa-token 深入开发的分享!
如果您觉得本文不错,欢迎点赞支持,您的关注是我坚持的动力!