91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

SpringSecurity怎么定義多個過濾器鏈

發布時間:2023-05-06 16:03:31 來源:億速云 閱讀:129 作者:iii 欄目:開發技術

今天小編給大家分享一下SpringSecurity怎么定義多個過濾器鏈的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。

簡介

  • Spring Security 是 Spring家族中的一個安全管理框架。相比與另外一個安全框架Shiro,它提供了更豐富的功能,社區資源也比Shiro豐富。

  • 一般來說中大型的項目都是使用SpringSecurity來做安全框架。小項目有Shiro的比較多,因為相比與SpringSecurity,Shiro的上手更加的簡單。

一般Web應用的需要進行認證和授權。

  • 認證:驗證當前訪問系統的是不是本系統的用戶,并且要確認具體是哪個用戶

  • 授權:經過認證后判斷當前用戶是否有權限進行某個操作

而認證和授權也是SpringSecurity作為安全框架的核心功能。

在Spring Security中可以定義多個過濾器鏈,一個WebSerityConfigurerAdapter的實例就可以配置一個過濾器鏈,我們只需要配置多個WebSerityConfigurerAdapter的實例即可

SpringSecurity怎么定義多個過濾器鏈

可以看到,當請求到達 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怎么定義多個過濾器鏈”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

特克斯县| 富锦市| 乌拉特中旗| 海门市| 原平市| 武城县| 乡城县| 望都县| 常山县| 梅河口市| 济宁市| 玉门市| 镇巴县| 无棣县| 慈溪市| 酉阳| 巫溪县| 巧家县| 修水县| 西吉县| 临湘市| 黎城县| 平果县| 聂拉木县| 永兴县| 西和县| 博湖县| 乌兰察布市| 仙桃市| 霸州市| 张家港市| 柯坪县| 沧源| 七台河市| 南召县| 淅川县| 长顺县| 利辛县| 通河县| 巴里| 屏山县|