Spring Boot/認証/Spring Security

Spring Boot/認証/Spring Security

Spring Boot ではこういうアクセス制限をかける処理を Spring Security というモノでやるらしい。

しかしながら、この Spring Security は非常に重厚にできていて、理解して実用レベルのカスタマイズを行うのがかなり骨が折れる。単に実用レベルの認証がしたいだけなら自力で実装したほうが楽。

調べると、やらた XML を書きまくるソースが出てくるがアレは古いやり方で、 2018-11 現在では Java Configurations という仕組みで設定はほぼ全部 Java コードで書ける。 このほうが IDE のチェックが利くのでよろしい。

このフレームワークはやたら歴史が古くて記述がピンキリである。

以下のドキュメントは全部失敗ドキュメント。これでは実用レベルなモノを作れない。

Spring BootでWebセキュリティを設定しよう (1/2):CodeZine(コードジン)

準備

build.gradle に書く

dependencies {
    implementation('org.springframework.boot:spring-boot-starter-security')
}

こいつを設定すると、デフォルトの設定で勝手にログイン画面とか作ってくれたりいろいろおせっかいをたくさんやるのでびっくりしないように。

開発全体の流れ

  • 認証用のIDとパスワードを入力する画面を作る
  • 認証用設定クラスを作る
    • 専用のクラス(WebSecurityConfigurerAdapter)を継承し特定のアノテーション(EnableWebSecurity)をつける
    • 全体の中のどの画面を認証でガードしてどの画面を認証から除外してフリーにするのか設定
    • どう認証するのかの設定
      • どの画面が認証用の入力画面なのか?を設定
      • 入力されたモノをどのURLで受けるのか設定
      • その画面からどういう名前のパラメータで来るのか設定
      • 認証が成功した場合の遷移先の設定
    • 認証解除(ログアウト)の設定
      • どのURLで受けてログアウトするのか設定
      • ログアウト成功した場合の遷移先の設定
  • 認証失敗時のエラーハンドリング用のクラスを作成する
  • 認証用の(ユーザー)情報をどこから取ってくるのか設定を作る
  • 認証用の情報を取ってくる Service を実装する(専用のインターフェース UserDetailsService を実装したもの)
  • 認証情報を格納する Entity 的なモノ(UserDetailsを実装)を作成する。

実際の挙動

ログアウト状態で login 画面にアクセスした場合、もうすでに JSESSIONID という値が cookie にセットされている。

ログイン画面から認証成功して成功後の画面に遷移した場合はちゃんと JSESSIONID が貼り変わっているのが確認できる。

よくサンプルにある典型的なコードは内部で何をやっているのか?

http.formLogin().loginProcessingUrl

どの URL でログイン処理をうけつけるかというやつである。

authFilter.setRequiresAuthenticationRequestMatcher(createLoginProcessingUrlMatcher(loginProcessingUrl));

このようにフィルタにセットしている。

http.formLogin().loginPage

どの URL でログインのためのフォームを表示するのかである。 こいつは各種セッティングを調整するようなメソッドで特にマニュアル設定の場合は意味があまりなさそう

http.formLogin().failureHandler

このようになっていてマニュアル設定とほぼ同じである。

authFilter.setAuthenticationFailureHandler(failureHandler);

http.formLogin().defaultSuccessUrl

このハンドラは SavedRequestAwareAuthenticationSuccessHandler というモノが使われている

最終的にはこうなっていたのでマニュアルと同じである

authFilter.setAuthenticationSuccessHandler(successHandler);
java/spring/spring_boot/auth/spring_security/start.txt · 最終更新: 2019-09-10 10:10 by ore