springboot集成sa-token框架实现用户认证功能(使用注解形式,代码量极少)

轻量级框架sa-token(已集成redis),只需调用api即可实现认证功能

0、导入sa-token依赖

<dependency>
	<groupId>cn.dev33</groupId>
	<artifactId>sa-token-spring-boot-starter</artifactId>
	<version>1.27.0</version>
</dependency>
<!-- Sa-Token 整合 Redis (使用jackson序列化方式) -->
<!--Sa-token默认将会话数据保存在内存中,此模式读写速度最快,且避免了序列化与反序列化带来的性能消耗,
但是此模式也有一些缺点,比如:重启后数据会丢失,无法在集群模式下共享数据。-->
<!--引入以下依赖和配置后,框架会自动使用Redis存储。-->
<dependency>
	<groupId>cn.dev33</groupId>
	<artifactId>sa-token-dao-redis-jackson</artifactId>
	<version>1.27.0</version>
</dependency>
<!-- 提供Redis连接池 -->
<dependency>
	<groupId>org.apache.commons</groupId>
	<artifactId>commons-pool2</artifactId>
</dependency>

1、编写application.yml

# Sa-Token 配置
sa-token:
  # jwt秘钥
  jwt-secret-key: team10ConstellationGenerator
  # token名称 (同时也是cookie名称)
  token-name: satoken
  # token有效期,单位s 默认30天, -1代表永不过期
  timeout: 1800
  # 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

2、写一个配置类,使用SaAnnotationInterceptor注解拦截请求

@Configuration
public class SaTokenConfig implements WebMvcConfigurer {

    /**
     * 拦截标注@SaCheckLogin的类或方法,必须登录才能通过校验
     * @param registry
     */
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new SaAnnotationInterceptor()).addPathPatterns("/**");
    }

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        //解决静态资源无法访问
        registry.addResourceHandler("/**")
                .addResourceLocations("classpath:/static/");
        //解决swagger无法访问
        registry.addResourceHandler("/swagger-ui.html")
                .addResourceLocations("classpath:/META-INF/resources/");
        //解决swagger的js文件无法访问
        registry.addResourceHandler("/webjars/**")
                .addResourceLocations("classpath:/META-INF/resources/webjars");
    }
}

注意:静态资源配置只需在application.yml或者配置类中的一个进行配置即可,否则不生效!(作者遇到的错误)

3、登录和注销使用的方法

//当前用户登录,loginId为10001
StpUtil.login(10001);
//获取当前用户登录的token信息,里面的tokenName和tokenValue在前端进行保存,
//前端在调用请求时携带在header中(格式为{tokenName: tokenValue})
StpUtil.getTokenInfo();

//用户注销,将loginId传入即可
StpUtil.logout(10001);

4、在需要拦截的类或方法上标注@SaCheckLogin注解

Example:
@SaCheckLogin
public R logout(){}
@SaCheckLogin
public class TopicController {}

5、测试

登录返回结果示例如下:

springboot集成sa-token框架实现用户认证功能(使用注解形式,代码量极少)

最后,附上sa-token的官方文档

有兴趣的小伙伴可以去尝试其他功能噢!
若有误,欢迎评论区指正哈~

上一篇:安装cnpm、yarn、tyarn


下一篇:力扣696、计数二进制子串