轻量级框架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、测试
登录返回结果示例如下:
最后,附上sa-token的官方文档
有兴趣的小伙伴可以去尝试其他功能噢!
若有误,欢迎评论区指正哈~