前提
現在、spring securityの勉強をしています。
参考書「田村達也. 後悔しないためのSpring Boot 入門書:Spring 解体新書(第2版): Spring Bootが丸分かり Spring解体新書 」 を使用しているのですが、WebSecurityConfigurerAdapterを継承した方法で記述してあります。
しかし、上記の方法は現在非推奨になってしまっており、最新の書き方を調べているのですが、サイトによって書き方がまちまちでどれを参考にすれば良いか分からない状態です。
実現したいこと
- spring security 5.7以降での書き方を知りたい。
参考書で書かれている書き方
java
1package com.example.config; 2 3import org.springframework.context.annotation.Configuration; 4import org.springframework.security.config.annotation.web.builders.HttpSecurity; 5import orgspringframeworksecurityconfigannotationwebbuildersWebSecurity; 6import orgspringframeworksecurityconfigannotationwebconfigurationEnableWebSecurity; 7import orgspringframeworksecurityconfigannotationwebconfigurationW e b SecurityConfigurerAdapter; 8 9@EnableWebSecurity 10@Configuration 11public class SecurityConfig extends WebSecurityConfigurerAdapter { 12 13 @Override 14 public void configure(WebSecurity web) throws Exception { 15 16 // セキュリティを適用しない 17 web. 18 ignoring() 19 .antMatchers("/webjars/**") 20 .antMatchers("/css/**") 21 .antMatchers("/js/**") 22 .antMatchers("/h2-console/**"); 23 } 24 25 /** セキュリティの各種設定 */ 26 @Override protected void configure(HttpSecurity http) throws Exception { 27 28 // ログイン不要ページの設定 29 http.authorizeRequests() 30 .antMatchers("/login").permitAll() //直リンクOK 31 .antMatchers("/user/signup").permitAll() //直リンクOK 32 .anyRequest().authenticated(); // それ以外は直リンクNG 33 34 // ログイン処理 35 http.formLogin() 36 .loginProcessingUrl("/login") //ログイン処理のパス 37 .loginPage("/login") // ログインページの指定 38 .failureUrl("/login?error") // ログイン失敗時の遷移先 39 .usernameParameter("userId") // ログインページのユーザーID 40 .passwordParameter("password") // ログインページのパスワード 41 .defaultSuccessUrl("/user/list", true); // 成功後の遷移先 42 43 //CSRF対策を無効に設定(一時的) 44 http.csrf().disable(); 45 } 46} 47
最新に適応した書き方
java
1package com.example.config; 2 3import org.springframework.context.annotation.Bean; 4import org.springframework.context.annotation.Configuration; 5import org.springframework.security.config.annotation.web.builders.HttpSecurity; 6import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; 7import org.springframework.security.web.SecurityFilterChain; 8 9@Configuration 10@EnableWebSecurity 11public class SecurityConfig { 12 13 @Bean 14 public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception { 15 16 http.authorizeHttpRequests(authz -> authz // URL毎の認可設定記述開始 17 .requestMatchers(PathRequest.toStaticResources().atCommonLocations()).permitAll() 18 .mvcMatchers("/login").permitAll() // /loginはログイン無しでもアクセス可能 19 .mvcMatchers("/user/signup").permitAll() // /user/signupはログイン無しでもアクセス可能 20 .anyRequest().authenticated() // 他のURLはログインのみアクセス可能 21 22 ).formLogin(login -> login 23 .loginProcessingUrl("/login") // ログイン処理のパス 24 .loginPage("/login") // ログインページの指定 25 .failureUrl("/login?error") // ログイン失敗時の遷移先 26 .usernameParameter("userId") // ログインページのユーザーID 27 .passwordParameter("password") // ログインページのパスワード 28 .defaultSuccessUrl("/user/list", true) // 成功後の遷移先 29 .permitAll() // ログイン画面は未ログインでもアクセス可能 30 31 ).logout(logout -> logout 32 .logoutSuccessUrl("/login") 33 34 ).csrf().disable(); 35 36 return http.build(); 37 }
試したこと
参考書の書き方では「WebSecurity」、「HttpSecurity」に分かれていたメソッドを、自分で書いた方は1つにまとめています。
また、下記コードのように分けて書くやり方も試しましたが、コンソールにWARNが出てしまうため不採用にしています。
java
1 @Bean 2 public WebSecurityCustomizer webSecurityCustomizer() { 3 return web -> web.ignoring().requestMatchers(PathRequest.toStaticResources().atCommonLocations()); 4 }
参考サイト
https://qiita.com/suke_masa/items/908805dd45df08ba28d8
https://spring.io/blog/2022/02/21/spring-security-without-the-websecurityconfigureradapter
https://www.docswell.com/s/MasatoshiTada/KGVY9K-spring-security-intro
上記のサイトを参考にしました。
また、これ以外にも書き方の参考になるサイト、書籍等があれば教えて頂きたいです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2023/01/04 10:13