SpringBoot使用Sa-Token實現(xiàn)路徑攔截和特定接口放行
1. 引入依賴
首先,在pom.xml
文件中引入Sa-Token相關的依賴。Sa-Token是一個輕量級的Java權限認證框架,可以幫助我們輕松實現(xiàn)用戶登錄狀態(tài)的管理和權限認證。
<dependency> <groupId>cn.dev33</groupId> <artifactId>sa-token-spring-boot-starter</artifactId> <version>1.27.0</version> </dependency>
2. 創(chuàng)建配置類 SecurityProperties
定義一個配置類SecurityProperties
,用于讀取和存儲從配置文件中加載的排除路徑信息。這里使用了Spring Boot的@ConfigurationProperties
注解來綁定配置文件中的屬性。
import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component; import lombok.Data; @Data @Component @ConfigurationProperties(prefix = "security") public class SecurityProperties { /** * 排除路徑 */ private String[] excludes; }
@Data
:這是Lombok的注解,自動生成getter和setter方法。@Component
:將該類注冊為Spring的組件。@ConfigurationProperties
:指定前綴security
,從配置文件中讀取以該前綴開頭的屬性,并將這些屬性映射到該類的字段上。
3. 編寫配置文件
在配置文件application.yml
或者application.properties
中,配置需要排除的路徑。例如:
application.yml:
security: excludes: - "/public/**" - "/login" - "/register"
application.properties:
security.excludes=/public/**,/login,/register
/public/**
:排除所有以/public/
開頭的路徑。/login
:排除/login
路徑。/register
:排除/register
路徑。
4. 配置攔截器
創(chuàng)建一個配置類WebConfig
,實現(xiàn)WebMvcConfigurer
接口,在其中配置Sa-Token的攔截器,并將排除的路徑應用到攔截器中。
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; import cn.dev33.satoken.interceptor.SaInterceptor; import cn.dev33.satoken.router.SaRouter; import cn.dev33.satoken.stp.StpUtil; @Configuration public class WebConfig implements WebMvcConfigurer { @Autowired private SecurityProperties securityProperties; @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(new SaInterceptor(handler -> { // 獲取所有的URL并進行檢查 SaRouter.match("/**").check(() -> { // 檢查是否登錄 StpUtil.checkLogin(); }); })) .addPathPatterns("/**") // 攔截所有路徑 .excludePathPatterns(securityProperties.getExcludes()); // 排除指定路徑 } }
@Configuration
:標識這是一個配置類。addInterceptors
:重寫該方法,向Spring的攔截器注冊中心添加自定義的攔截器。SaInterceptor
:Sa-Token提供的攔截器,主要用于權限驗證。SaRouter.match("/**")
:匹配所有路徑。StpUtil.checkLogin()
:Sa-Token提供的登錄狀態(tài)檢查方法,用于驗證用戶是否已登錄。excludePathPatterns
:從攔截中排除指定的路徑,這些路徑從SecurityProperties
中獲取。
5. 驗證攔截效果
啟動Spring Boot應用程序,驗證配置是否生效。以下是一些測試步驟:
訪問排除路徑:
- 嘗試訪問配置文件中排除的路徑,如
/public/**
、/login
、/register
。 - 這些路徑應不會觸發(fā)登錄檢查,可以直接訪問。
- 嘗試訪問配置文件中排除的路徑,如
訪問其他路徑:
- 嘗試訪問其他未排除的路徑,如
/admin
、/user/profile
等。 - 這些路徑應觸發(fā)Sa-Token的登錄驗證邏輯,如果用戶未登錄,將會被攔截,并返回相應的未登錄提示。
- 嘗試訪問其他未排除的路徑,如
代碼解析
SecurityProperties
類:通過@ConfigurationProperties
注解,Spring Boot會自動將前綴為security
的配置屬性綁定到該類的excludes
字段上,從而實現(xiàn)排除路徑的配置。- 配置文件:在配置文件中定義需要排除的路徑,以便動態(tài)加載到
SecurityProperties
中。 WebConfig
類:實現(xiàn)WebMvcConfigurer
接口,通過addInterceptors
方法添加Sa-Token的攔截器,并使用excludePathPatterns
方法將配置文件中定義的排除路徑應用到攔截器中。
詳細解釋
依賴配置
Sa-Token是一個輕量級的權限認證框架,可以幫助我們輕松實現(xiàn)用戶登錄狀態(tài)的管理和權限認證。通過引入sa-token-spring-boot-starter
依賴,我們可以很方便地將其集成到Spring Boot項目中。
配置類 SecurityProperties
SecurityProperties
類的作用是將配置文件中定義的排除路徑讀取并存儲到excludes
數(shù)組中。通過使用@ConfigurationProperties
注解,我們可以將前綴為security
的屬性綁定到該類的excludes
字段上。這樣做的好處是,排除路徑可以通過配置文件進行動態(tài)配置,方便管理和維護。
配置文件
在配置文件中,我們定義了需要排除的路徑。這些路徑將不會被攔截器攔截,可以直接訪問。配置文件支持YAML格式和Properties格式,根據(jù)項目需要選擇合適的格式進行配置。
攔截器配置
在WebConfig
類中,我們實現(xiàn)了WebMvcConfigurer
接口,并重寫了addInterceptors
方法。在該方法中,我們創(chuàng)建了一個Sa-Token的攔截器,并通過SaRouter.match("/**")
匹配所有路徑。對于匹配到的路徑,我們使用StpUtil.checkLogin()
方法進行登錄狀態(tài)檢查。如果用戶未登錄,將會被攔截,并返回相應的未登錄提示。
通過excludePathPatterns
方法,我們將從SecurityProperties
中獲取的排除路徑應用到攔截器中。這樣一來,配置文件中定義的排除路徑將不會被攔截器攔截,可以直接訪問。
總結
通過本文的介紹,我們了解了如何在Spring Boot中使用Sa-Token實現(xiàn)路徑攔截和特定接口放行。我們首先引入了Sa-Token的依賴,然后定義了一個配置類SecurityProperties
,用于讀取和存儲排除路徑信息。接著,在配置文件中定義了需要排除的路徑,并在WebConfig
類中配置了Sa-Token的攔截器,將排除路徑應用到攔截器中。最后,通過測試和驗證,確保配置生效,實現(xiàn)了對特定路徑的放行和其他路徑的權限驗證。
這種方式可以幫助開發(fā)者更靈活地管理Web應用中的訪問控制,提升系統(tǒng)的安全性和可維護性。如果你有更多的自定義需求,可以根據(jù)Sa-Token的文檔進行進一步配置和擴展。
以上就是SpringBoot使用Sa-Token實現(xiàn)路徑攔截和特定接口放行的詳細內容,更多關于SpringBoot Sa-Token攔截和放行的資料請關注腳本之家其它相關文章!
相關文章
遞歸出現(xiàn)棧溢出stackoverflow的問題及解決
這篇文章主要介紹了關于遞歸出現(xiàn)棧溢出stackoverflow的問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-09-09mybatisplus如何在xml的連表查詢中使用queryWrapper
這篇文章主要介紹了mybatisplus如何在xml的連表查詢中使用queryWrapper,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-01-01java和javascript中過濾掉img形式的字符串不顯示圖片的方法
這篇文章主要介紹了java和javascript中過濾掉img形式的字符串不顯示圖片的方法,以實例形式分別講述了采用java和javascript實現(xiàn)過濾掉img形式字符串的技巧,需要的朋友可以參考下2015-02-02