輕量級框架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: qwasiniaciasubfiaudas
# 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的官方文檔
有興趣的小伙伴可以去嘗試其他功能噢!
若有誤,歡迎評論區指正哈~