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: 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、測試

登錄返回結果示例如下:

image

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

有興趣的小伙伴可以去嘗試其他功能噢!
若有誤,歡迎評論區指正哈~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM