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

溫馨提示×

溫馨提示×

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

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

SpringBoot2.7?WebSecurityConfigurerAdapter類過期如何配置

發布時間:2022-06-18 09:48:39 來源:億速云 閱讀:3682 作者:zzz 欄目:開發技術

本文小編為大家詳細介紹“SpringBoot2.7 WebSecurityConfigurerAdapter類過期如何配置”,內容詳細,步驟清晰,細節處理妥當,希望這篇“SpringBoot2.7 WebSecurityConfigurerAdapter類過期如何配置”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。

前言

進入到 SpringBoot2.7 時代,有小伙伴發現有一個常用的類忽然過期了:

SpringBoot2.7?WebSecurityConfigurerAdapter類過期如何配置

在 Spring Security 時代,這個類可太重要了。過期的類當然可以繼續使用,但是你要是決定別扭,只需要稍微看一下注釋,基本上就明白該怎么玩了。

WebSecurityConfigurerAdapter 的注釋

我們來看下 WebSecurityConfigurerAdapter 的注釋:

SpringBoot2.7?WebSecurityConfigurerAdapter類過期如何配置

從這段注釋中我們大概就明白了咋回事了。

配置Spring Security

以前我們自定義類繼承自 WebSecurityConfigurerAdapter 來配置我們的 Spring Security,我們主要是配置兩個東西:

  • configure(HttpSecurity)

  • configure(WebSecurity)

前者主要是配置 Spring Security 中的過濾器鏈,后者則主要是配置一些路徑放行規則。

現在在 WebSecurityConfigurerAdapter 的注釋中,人家已經把意思說的很明白了:

  • 以后如果想要配置過濾器鏈,可以通過自定義 SecurityFilterChain Bean 來實現。

  • 以后如果想要配置 WebSecurity,可以通過 WebSecurityCustomizer Bean 來實現。

那么接下來我們就通過一個簡單的例子來看下。

引入Web和Spring Security依賴

首先我們新建一個 Spring Boot 工程,引入 Web 和 Spring Security 依賴,注意 Spring Boot 選擇最新的 2.7。

SpringBoot2.7?WebSecurityConfigurerAdapter類過期如何配置

接下來我們提供一個簡單的測試接口,如下:

@RestController
public class HelloController {
    @GetMapping("/hello")
    public String hello() {
        return "hello 江南一點雨!";
    }
}

小伙伴們知道,在 Spring Security 中,默認情況下,只要添加了依賴,我們項目的所有接口就已經被統統保護起來了,現在啟動項目,訪問 /hello 接口,就需要登錄之后才可以訪問,登錄的用戶名是 user,密碼則是隨機生成的,在項目的啟動日志中。

現在我們的第一個需求是使用自定義的用戶,而不是系統默認提供的,這個簡單,我們只需要向 Spring 容器中注冊一個 UserDetailsService 的實例即可,像下面這樣:

@Configuration
public class SecurityConfig {
    @Bean
    UserDetailsService userDetailsService() {
        InMemoryUserDetailsManager users = new InMemoryUserDetailsManager();
        users.createUser(User.withUsername("javaboy").password("{noop}123").roles("admin").build());
        users.createUser(User.withUsername("江南一點雨").password("{noop}123").roles("admin").build());
        return users;
    }
}

這就可以了。

當然我現在的用戶是存在內存中的,如果你的用戶是存在數據庫中,那么只需要提供 UserDetailsService 接口的實現類并注入 Spring 容器即可,這個之前在 vhr 視頻中講過多次了(公號后臺回復 666 有視頻介紹),這里就不再贅述了。

重寫configure(WebSecurity方法進行配置

但是假如說我希望 /hello 這個接口能夠匿名訪問,并且我希望這個匿名訪問還不經過 Spring Security 過濾器鏈,要是在以前,我們可以重寫 configure(WebSecurity) 方法進行配置,但是現在,得換一種玩法:

@Configuration
public class SecurityConfig {
    @Bean
    UserDetailsService userDetailsService() {
        InMemoryUserDetailsManager users = new InMemoryUserDetailsManager();
        users.createUser(User.withUsername("javaboy").password("{noop}123").roles("admin").build());
        users.createUser(User.withUsername("江南一點雨").password("{noop}123").roles("admin").build());
        return users;
    }
    @Bean
    WebSecurityCustomizer webSecurityCustomizer() {
        return new WebSecurityCustomizer() {
            @Override
            public void customize(WebSecurity web) {
                web.ignoring().antMatchers("/hello");
            }
        };
    }
}

以前位于 configure(WebSecurity) 方法中的內容,現在位于 WebSecurityCustomizer Bean 中,該配置的東西寫在這里就可以了。

定制登錄頁面參數等

那如果我還希望對登錄頁面,參數等,進行定制呢?繼續往下看:

@Configuration
public class SecurityConfig {
    @Bean
    UserDetailsService userDetailsService() {
        InMemoryUserDetailsManager users = new InMemoryUserDetailsManager();
        users.createUser(User.withUsername("javaboy").password("{noop}123").roles("admin").build());
        users.createUser(User.withUsername("江南一點雨").password("{noop}123").roles("admin").build());
        return users;
    }
    @Bean
    SecurityFilterChain securityFilterChain() {
        List<Filter> filters = new ArrayList<>();
        return new DefaultSecurityFilterChain(new AntPathRequestMatcher("/**"), filters);
    }
}

Spring Security 的底層實際上就是一堆過濾器,所以我們之前在 configure(HttpSecurity) 方法中的配置,實際上就是配置過濾器鏈。現在過濾器鏈的配置,我們通過提供一個 SecurityFilterChain Bean 來配置過濾器鏈,SecurityFilterChain 是一個接口,這個接口只有一個實現類 DefaultSecurityFilterChain,構建 DefaultSecurityFilterChain 的第一個參數是攔截規則,也就是哪些路徑需要攔截,第二個參數則是過濾器鏈,這里我給了一個空集合,也就是我們的 Spring Security 會攔截下所有的請求,然后在一個空集合中走一圈就結束了,相當于不攔截任何請求。

此時重啟項目,你會發現 /hello 也是可以直接訪問的,就是因為這個路徑不經過任何過濾器。

其實我覺得目前這中新寫法比以前老的寫法更直觀,更容易讓大家理解到 Spring Security 底層的過濾器鏈工作機制。

有小伙伴會說,這寫法跟我以前寫的也不一樣呀!這么配置,我也不知道 Spring Security 中有哪些過濾器,其實,換一個寫法,我們就可以將這個配置成以前那種樣子:

@Configuration
public class SecurityConfig {
    @Bean
    UserDetailsService userDetailsService() {
        InMemoryUserDetailsManager users = new InMemoryUserDetailsManager();
        users.createUser(User.withUsername("javaboy").password("{noop}123").roles("admin").build());
        users.createUser(User.withUsername("江南一點雨").password("{noop}123").roles("admin").build());
        return users;
    }
    @Bean
    SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
        http.authorizeRequests()
                .anyRequest().authenticated()
                .and()
                .formLogin()
                .permitAll()
                .and()
                .csrf().disable();
        return http.build();
    }
}

讀到這里,這篇“SpringBoot2.7 WebSecurityConfigurerAdapter類過期如何配置”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。

向AI問一下細節

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

AI

阿拉善盟| 陆良县| 密山市| 綦江县| 阿荣旗| 岳普湖县| 浪卡子县| 麟游县| 宁阳县| 兴和县| 昆明市| 洞口县| 昭苏县| 崇阳县| 镇宁| 洛阳市| 梁河县| 嘉祥县| 静乐县| 舞钢市| 刚察县| 延寿县| 海阳市| 赫章县| 新源县| 高尔夫| 原平市| 湖口县| 广丰县| 九江县| 绥滨县| 延庆县| 文化| 林周县| 海口市| 高州市| 芜湖市| 新闻| 象州县| 正镶白旗| 都江堰市|