您好,登錄后才能下訂單哦!
今天小編給大家分享一下SpringSecurity怎么定義多個過濾器鏈的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。
Spring Security 是 Spring家族中的一個安全管理框架。相比與另外一個安全框架Shiro,它提供了更豐富的功能,社區資源也比Shiro豐富。
一般來說中大型的項目都是使用SpringSecurity來做安全框架。小項目有Shiro的比較多,因為相比與SpringSecurity,Shiro的上手更加的簡單。
一般Web應用的需要進行認證和授權。
認證:驗證當前訪問系統的是不是本系統的用戶,并且要確認具體是哪個用戶
授權:經過認證后判斷當前用戶是否有權限進行某個操作
而認證和授權也是SpringSecurity作為安全框架的核心功能。
在Spring Security中可以定義多個過濾器鏈,一個WebSerityConfigurerAdapter的實例就可以配置一個過濾器鏈,我們只需要配置多個WebSerityConfigurerAdapter的實例即可
可以看到,當請求到達 FilterChainProxy 之后,FilterChainProxy 會根據請求的路徑,將請求轉發到不同的 過濾器鏈 上面去,不同的 過濾器鏈 對應了不同的過濾器,也就是不同的請求將經過不同的過濾器。
@Configuration public class SecurityConfig { @Bean protected UserDetailsService userDetailsService() { InMemoryUserDetailsManager manager = new InMemoryUserDetailsManager(); manager.createUser(User.withUsername("javaboy").password("{bcrypt}$2a$10$Sb1gAUH4wwazfNiqflKZve4Ubh.spJcxgHG8Cp29DeGya5zsHENqi").roles("admin", "aaa", "bbb").build()); manager.createUser(User.withUsername("sang").password("{noop}123").roles("admin").build()); manager.createUser(User.withUsername("吳名氏").password("{MD5}{Wucj/L8wMTMzFi3oBKWsETNeXbMFaHZW9vCK9mahMHc=}4d43db282b36d7f0421498fdc693f2a2").roles("user", "aaa", "bbb").build()); return manager; } @Configuration @Order(1) static class DefaultWebSecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http.antMatcher("/foo/**") .authorizeRequests() .anyRequest().hasRole("admin") .and() .csrf().disable(); } } @Configuration @Order(2) static class DefaultWebSecurityConfig2 extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http.antMatcher("/bar/**") .authorizeRequests() .anyRequest().hasRole("user") .and() .formLogin() .permitAll() .and() .csrf().disable(); } } }
說明:
首先,SecurityConfig 不再需要繼承自 WebSecurityConfigurerAdapter了,只是作為一個普通的配置類,加上 @Configuration 注解即可。
提供 UserDetailsService 實例,相當于是我們的數據源。
創建靜態內部類繼承 WebSecurityConfigurerAdapter 類,同時用 @Configuration
注解標記靜態內部類是一個配置類,配置類里邊的代碼就和之前的一樣了,無需贅述。
每一個靜態內部類相當于就是一個過濾器鏈的配置。
注意在靜態內部類里邊,我沒有使用 http.authorizeRequests()
開始,http.authorizeRequests() 配置表示該過濾器鏈過濾的路徑是 /。在靜態內部類里邊,我是用了
http.antMatcher("/bar/") 開啟配置,表示將當前過濾器鏈的攔截范圍限定在
/bar/**。所以有的時候authorizeRequests()不能放在第一個位置
當存在多個過濾器鏈的時候,必然會有一個優先級的問題,所以每一個過濾器鏈的配置類上通過 @Order(2)
注解來標記優先級。數字越大優先級越低。請求會先進入優先級高的過濾器鏈中。
以上就是“SpringSecurity怎么定義多個過濾器鏈”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。