質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Spring Security

Spring Securityは、Springのサブプロジェクトの一つでWebアプリケーションに必要な機能を追加します。正規ユーザーであるかを確認するための「認証機能」と、ユーザーのアクセスを制御する「認可機能」を簡単に追加することが可能です。

Spring MVC

Spring MVCとは、Javaを用いてWebアプリケーションを開発できるフレームワーク。アーキテクチャにMVCを採用しており、画面遷移と入出力パラメータの受け渡しの基本的な機能の他、ユーザーの送信したパラメータに対する入力チェックなどさまざまな機能を持ちます。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Spring

Spring Framework は、Javaプラットフォーム向けのオープンソースアプリケーションフレームワークです。 Java Platform上に、 Web ベースのアプリケーションを設計するための拡張機能が数多く用意されています。

Spring Boot

Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。

Q&A

解決済

1回答

3754閲覧

spring security5.7以降WebSecurityConfigurerAdapterを使わない新しい書き方が知りたい。

JackOguro

総合スコア4

Spring Security

Spring Securityは、Springのサブプロジェクトの一つでWebアプリケーションに必要な機能を追加します。正規ユーザーであるかを確認するための「認証機能」と、ユーザーのアクセスを制御する「認可機能」を簡単に追加することが可能です。

Spring MVC

Spring MVCとは、Javaを用いてWebアプリケーションを開発できるフレームワーク。アーキテクチャにMVCを採用しており、画面遷移と入出力パラメータの受け渡しの基本的な機能の他、ユーザーの送信したパラメータに対する入力チェックなどさまざまな機能を持ちます。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Spring

Spring Framework は、Javaプラットフォーム向けのオープンソースアプリケーションフレームワークです。 Java Platform上に、 Web ベースのアプリケーションを設計するための拡張機能が数多く用意されています。

Spring Boot

Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。

0グッド

0クリップ

投稿2022/12/29 12:42

前提

現在、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

上記のサイトを参考にしました。
また、これ以外にも書き方の参考になるサイト、書籍等があれば教えて頂きたいです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

サイトであれば、ご提示のサイトが一番参考になると思います。
(サイトにも書いてありますが、現在web.ignoring()は使わないので、ご提示の「最新に適応した書き方」が良いと思います)

書籍であれば、下の本にSpring Securityの新しい書き方が載っています。
Spring Boot 2 入門: 基礎から実演まで
また、Spring Securityは載っていませんが、Spring Boot 3.0の本もあります。
Spring Boot 3で始めるWebアプリケーション開発入門

両方ともSpring Boot 3.0のソースコードがダウンロードできますし、Kindle Unlimitedに入っていれば無料で読めるので参考になると思います。

投稿2022/12/30 10:36

KT001

総合スコア618

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

JackOguro

2023/01/04 10:13

回答ありがとうございます。 参考にさせて頂きます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問