最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot2.7?WebSecurityConfigurerAdapter類過期配置

 更新時(shí)間:2022年06月17日 16:46:40   作者:江南一點(diǎn)雨  
這篇文章主要為大家介紹了SpringBoot2.7中WebSecurityConfigurerAdapter類過期應(yīng)該如何配置,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

前言

進(jìn)入到 SpringBoot2.7 時(shí)代,有小伙伴發(fā)現(xiàn)有一個(gè)常用的類忽然過期了:

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

WebSecurityConfigurerAdapter 的注釋

我們來看下 WebSecurityConfigurerAdapter 的注釋:

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

配置Spring Security

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

  • configure(HttpSecurity)
  • configure(WebSecurity)

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

現(xiàn)在在 WebSecurityConfigurerAdapter 的注釋中,人家已經(jīng)把意思說的很明白了:

  • 以后如果想要配置過濾器鏈,可以通過自定義 SecurityFilterChain Bean 來實(shí)現(xiàn)。
  • 以后如果想要配置 WebSecurity,可以通過 WebSecurityCustomizer Bean 來實(shí)現(xiàn)。

那么接下來我們就通過一個(gè)簡(jiǎn)單的例子來看下。

引入Web和Spring Security依賴

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

接下來我們提供一個(gè)簡(jiǎn)單的測(cè)試接口,如下:

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

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

現(xiàn)在我們的第一個(gè)需求是使用自定義的用戶,而不是系統(tǒng)默認(rèn)提供的,這個(gè)簡(jiǎn)單,我們只需要向 Spring 容器中注冊(cè)一個(gè) UserDetailsService 的實(shí)例即可,像下面這樣:

@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("江南一點(diǎn)雨").password("{noop}123").roles("admin").build());
        return users;
    }
}

這就可以了。

當(dāng)然我現(xiàn)在的用戶是存在內(nèi)存中的,如果你的用戶是存在數(shù)據(jù)庫中,那么只需要提供 UserDetailsService 接口的實(shí)現(xiàn)類并注入 Spring 容器即可,這個(gè)之前在 vhr 視頻中講過多次了(公號(hào)后臺(tái)回復(fù) 666 有視頻介紹),這里就不再贅述了。

重寫configure(WebSecurity方法進(jìn)行配置

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

@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("江南一點(diǎn)雨").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) 方法中的內(nèi)容,現(xiàn)在位于 WebSecurityCustomizer Bean 中,該配置的東西寫在這里就可以了。

定制登錄頁面參數(shù)等

那如果我還希望對(duì)登錄頁面,參數(shù)等,進(jìn)行定制呢?繼續(xù)往下看:

@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("江南一點(diǎn)雨").password("{noop}123").roles("admin").build());
        return users;
    }
    @Bean
    SecurityFilterChain securityFilterChain() {
        List<Filter> filters = new ArrayList<>();
        return new DefaultSecurityFilterChain(new AntPathRequestMatcher("/**"), filters);
    }
}

Spring Security 的底層實(shí)際上就是一堆過濾器,所以我們之前在 configure(HttpSecurity) 方法中的配置,實(shí)際上就是配置過濾器鏈?,F(xiàn)在過濾器鏈的配置,我們通過提供一個(gè) SecurityFilterChain Bean 來配置過濾器鏈,SecurityFilterChain 是一個(gè)接口,這個(gè)接口只有一個(gè)實(shí)現(xiàn)類 DefaultSecurityFilterChain,構(gòu)建 DefaultSecurityFilterChain 的第一個(gè)參數(shù)是攔截規(guī)則,也就是哪些路徑需要攔截,第二個(gè)參數(shù)則是過濾器鏈,這里我給了一個(gè)空集合,也就是我們的 Spring Security 會(huì)攔截下所有的請(qǐng)求,然后在一個(gè)空集合中走一圈就結(jié)束了,相當(dāng)于不攔截任何請(qǐng)求。

此時(shí)重啟項(xiàng)目,你會(huì)發(fā)現(xiàn) /hello 也是可以直接訪問的,就是因?yàn)檫@個(gè)路徑不經(jīng)過任何過濾器。

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

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

@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("江南一點(diǎn)雨").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();
    }
}

這么寫,就跟以前的寫法其實(shí)沒啥大的差別了。

好啦,多余的廢話我就不多說了,小伙伴們可以去試試 Spring Boot2.7 的最新玩法啦~

更多關(guān)于SpringBoot2.7類的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Spring Boot使用AOP在指定方法執(zhí)行完后執(zhí)行異步處理操作

    Spring Boot使用AOP在指定方法執(zhí)行完后執(zhí)行異步處理操作

    這篇文章主要介紹了Spring Boot使用AOP在指定方法執(zhí)行完后執(zhí)行異步處理操作,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2024-06-06
  • Spring Boot Web應(yīng)用程序配置詳解

    Spring Boot Web應(yīng)用程序配置詳解

    這篇文章主要介紹了Spring Boot Web應(yīng)用程序配置詳解,本文中將介紹一些Web應(yīng)用程序最常用的配置,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-05-05
  • 設(shè)置session有效時(shí)間的三種方式

    設(shè)置session有效時(shí)間的三種方式

    這篇文章主要介紹了設(shè)置session有效時(shí)間的三種方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • Java枚舉類型在switch語句正確使用方法詳解

    Java枚舉類型在switch語句正確使用方法詳解

    這篇文章主要介紹了Java枚舉類型在switch語句正確使用方法詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-07-07
  • Java的ConcurrentHashMap原理深入分析

    Java的ConcurrentHashMap原理深入分析

    這篇文章主要介紹了Java的ConcurrentHashMap原理深入分析,集合是編程中最常用的數(shù)據(jù)結(jié)構(gòu),而談到并發(fā),幾乎總是離不開集合這類高級(jí)數(shù)據(jù)結(jié)構(gòu)的支持,需要的朋友可以參考下
    2023-07-07
  • 基于Java的正則表達(dá)式

    基于Java的正則表達(dá)式

    正則表達(dá)式,又稱正規(guī)表示法、常規(guī)表示法(英語:Regular Expression,在代碼中常簡(jiǎn)寫為regex、regexp或RE),計(jì)算機(jī)科學(xué)的一個(gè)概念
    2017-05-05
  • JavaEE微框架Spring Boot深入解讀

    JavaEE微框架Spring Boot深入解讀

    spring框架作為JavaEE框架領(lǐng)域的一款重要的開源框架,在企業(yè)應(yīng)用開發(fā)中有著很重要的作用。接下來通過本文給大家介紹JavaEE微框架Spring Boot深入解讀,需要的朋友可以參考下
    2017-04-04
  • Spring?Security實(shí)現(xiàn)統(tǒng)一登錄與權(quán)限控制的示例代碼

    Spring?Security實(shí)現(xiàn)統(tǒng)一登錄與權(quán)限控制的示例代碼

    這篇文章主要介紹了Spring?Security實(shí)現(xiàn)統(tǒng)一登錄與權(quán)限控制,本文通過示例代碼重點(diǎn)看一下統(tǒng)一認(rèn)證中心和業(yè)務(wù)網(wǎng)關(guān)的建設(shè),需要的朋友可以參考下
    2022-03-03
  • SWT(JFace)體驗(yàn)之圖片的動(dòng)態(tài)漸變效果

    SWT(JFace)體驗(yàn)之圖片的動(dòng)態(tài)漸變效果

    SWT(JFace)體驗(yàn)之圖片的動(dòng)態(tài)漸變效果
    2009-06-06
  • Springboot實(shí)現(xiàn)通用Auth認(rèn)證的幾種方式

    Springboot實(shí)現(xiàn)通用Auth認(rèn)證的幾種方式

    本文主要介紹了Springboot實(shí)現(xiàn)通用Auth認(rèn)證的幾種方式,主要介紹了4種方式,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-07-07

最新評(píng)論

青州市| 原平市| 吉水县| 贵定县| 祥云县| 临夏市| 新竹市| 鹤峰县| 昌江| 湘阴县| 龙胜| 杭锦旗| 宁夏| 家居| 诏安县| 克东县| 石柱| 津市市| 同德县| 当雄县| 莱芜市| 田林县| 洛隆县| 朝阳区| 即墨市| 县级市| 湖北省| 米林县| 中阳县| 泰来县| 竹北市| 白水县| 郴州市| 海宁市| 旺苍县| 景德镇市| 察隅县| 富民县| 青浦区| 含山县| 常山县|