成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

進入 SpringBoot2.7,有一個重要的類過期了

開發 前端
進入到 SpringBoot2.7 時代,有小伙伴發現有一個常用的類忽然過期了,在 Spring Security 時代,這個類可太重要了。

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

圖片

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

我們來看下 WebSecurityConfigurerAdapter 的注釋:

圖片

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

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

  • configure(HttpSecurity)
  • configure(WebSecurity)

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

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

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

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

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

圖片

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

@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 有視頻介紹),這里就不再贅述了。

但是假如說我希望 ??/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();
}

}

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

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

責任編輯:趙寧寧 來源: 江南一點雨
相關推薦

2023-11-15 07:57:56

SpringBootJava框架

2023-04-06 09:31:00

IT計劃項目業務

2024-05-09 08:08:32

SpringBinderJava

2020-08-26 09:05:03

函數編譯詞法

2023-01-03 12:30:25

架構CPUGPU

2010-03-05 14:36:45

2011-03-24 09:34:41

SPRING

2023-03-26 19:38:09

2010-03-05 14:51:31

Linux重要系統目錄

2016-01-28 10:04:09

Jenkins運維持續交付

2020-03-31 18:54:31

微軟OfficeMicrosoft

2022-05-16 08:42:26

Pandasbug

2022-07-22 15:40:26

Atlassian服務器漏洞

2020-06-02 16:38:24

華為

2021-05-28 18:12:51

C++設計

2011-04-12 14:58:23

加密解密類

2020-09-17 10:58:58

IT文化首席信息官領導者

2025-06-16 09:33:08

2011-03-30 16:36:58

Oracle數據庫

2021-11-23 23:01:40

Windows微軟系統
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 中文字幕不卡在线观看 | 国产成人一区二区三区 | 精品一二 | 欧美日韩高清一区 | 青春草在线 | 国产精品99久久久精品免费观看 | 一级在线毛片 | 成人黄色在线 | 伊人在线视频 | 精品国产一区二区在线 | 国产欧美一区二区在线观看 | 欧美一级久久 | 成人在线精品视频 | 91在线播| 精品视频一区二区三区在线观看 | 精品久久久久一区二区国产 | 最大av在线 | 久久综合av | 欧美激情精品久久久久久 | 在线播放国产视频 | 久久久久av| 欧美国产精品一区二区 | 日韩亚洲一区二区 | 亚洲天堂精品久久 | 国产精品成人一区二区三区夜夜夜 | 精品亚洲一区二区 | 成人一区av偷拍 | 91成人在线 | 欧美日韩国产一区二区三区 | 天天碰夜夜操 | av在线电影网站 | 精品一区二区三区在线观看国产 | 九九热这里只有精品6 | 欧美日韩国产在线 | 亚洲精品毛片av | 中国一级毛片免费 | 蜜臀网站 | 天堂影院av| 免费一级片 | 国产www. | 欧美精品综合在线 |