WebSecurityConfigurerAdapter 並配合 @EnableWebSecurity 才能啟用Spring Security。AuthenticationManagerBuilder、HttpSecurity、WebSecurity。
API驗證、 session設定(設定JWT無狀態)、CSRF啟用/關閉、FilterChain的設定,可以看出Http請求會經過一連串的檢查才進入Controller。AuthenticationManagerBuilder,其根本上就是組裝成AuthenticationManager的配置類別,也就是組裝 passwordEncoder、UserDetailsService 的配置。@Bean 放入Spring容器作為元件。@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity httpSecurity) throws Exception{
httpSecurity
.csrf(AbstractHttpConfigurer::disable)
// 這邊將SessionPolicy宣告成STATELESS
// 意即不會利用Session儲存使用者登入資訊,也因此不會有SessionID存入Cookie
// 這也是為何要把CSRF關掉,因為根本沒用
.sessionManagement(session -> session.sessionCreationPolicy(SessionCreationPolicy.STATELESS))
.authorizeHttpRequests(auth -> auth
.requestMatchers("/login", "/registration", "/forgetPassword", "/prod/**", "/webhook/**").permitAll()
.anyRequest().authenticated()
);
return httpSecurity.build();
}
@Bean
public WebSecurityCustomizer webSecurityCustomizer() {
return (web) -> web.ignoring().requestMatchers(
"/css/**", "/js/**", "/images/**", "/favicon.ico", "/swagger-ui/**", "/*.html", "/*.png", "/static/**"
);
}
AuthenticationManagerBuilder,在現今版本中,我們通常會宣告 passwordEncoder、UserDetailsService 為Bean,Spring就會自動組裝成AuthenticationManager供我們的Controller使用拉~ 而這部份我想說留到明天來做好了!本篇文章出自《每天學Java直到今年結束》Day229,大家可以到我的網站上查看~