目次

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')
}

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

開発全体の流れ

実際の挙動

ログアウト状態で 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);