Spring Boot(四) 快速集成 Sa-token

708 阅读5分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 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 深入开发的分享!
如果您觉得本文不错,欢迎点赞支持,您的关注是我坚持的动力!