Spring MVC

Spring MVCでSpring Securityを利用してみた

今回は、Spring MVC上でSpring Securityを利用して、独自ログイン画面による認証処理を実装してみたので、そのサンプルプログラムを共有する。

前提条件

下記記事の実装が完了していること。

Spring MVCでMyBatisのSQLログ出力をしてみた今回は、Spring MVC上のサンプルプログラムで、MyBatisのカスタムSQLログを出力する処理を追加してみたので、そのサンプルプ...

流用ソース

Spring Bootを使っていた、下記記事のソースコードを流用するものとする。

Spring Boot上で独自ログイン画面上でSpring Securityの認証を行ってみた今回は、Spring Securityを利用して、独自ログイン画面を作成した上で、Spring Securityの認証処理を実装してみた...

サンプルプログラムの作成

作成したサンプルプログラムの構成は以下の通り。
サンプルプログラムの構成
なお、上記の赤枠は、「前提条件」のプログラムから変更したプログラムである。

pom.xmlの内容は以下の通りで、Spring Securityに関するライブラリを追加している。また、Springのバージョンを4.2.1.RELEASEに変更している。



また、web.xmlの内容は以下の通りで、Spring Securityのフィルタ設定を追加すると共に、今回追加するsecurity-context.xmlを読み込むようにしている。



さらに、security-context.xmlの内容は以下の通りで、流用ソースの「DemoSecurityConfig.java」と同じ内容を実装している。

また、CSSファイルの内容は以下の通りで、ファイルパスを「src/main/webapp/resources/static/css」フォルダ下に変更している。内容は特に変更していない。

さらに、コントローラクラスには、ログイン画面を表示する以下のメソッドを追加している。

「@RequestMapping」アノテーションの属性に「method = RequestMethod.GET」を追加することで、ログイン画面を開く場合のみこのメソッドが呼ばれ、postメソッドで実行されるログイン処理ではこのメソッドが呼ばれないようになっている。



また、ログイン画面のHTMLは以下の通りで、流用ソースの「login.html」と同じような内容を実装している。

上記ソースコードでは、「<input type=”hidden” th:name=”${_csrf.parameterName}” th:value=”${_csrf.token}”/>」というタグを追加しているが、これは、「DemoSecurityConfig.java」では@EnableWebSecurity アノテーションを利用することでCSRF対策が有効になりCSRFトークンが自動生成されていたが、今回はCSRFトークンが自動生成されないため必要になったため、追加している。

なお、CSRF対策については、以下のサイトを参照のこと。
https://terasolunaorg.github.io/guideline/5.1.0.RELEASE/ja/Security/CSRF.html#springsecuritycsrf

他のHTMLファイルにも同様に、formタグ内に1つずつこのタグを追加している。



さらに、検索画面のHTMLの内容は以下の通りで、流用ソースの「search.html」と同じように、ログアウトボタンの実装をしている。

その他のソースコード内容は、以下のサイトを参照のこと。
https://github.com/purin-it/java/tree/master/spring-mvc-security/demo

サンプルプログラムの実行結果

サンプルプログラムの実行結果は、以下の通り。

1) Spring MVCアプリケーションを起動し、「http://(サーバー名):(ポート番号)/(プロジェクト名)/」とアクセスすると、以下のログイン画面が表示される
サンプルプログラムの実行_1

2) security-context.xmlに定義したユーザーと違うユーザー名またはパスワードを入力し、「ログイン」ボタンを押下
サンプルプログラムの実行_2

3) 以下のように、ログインができず、ログイン画面にエラーメッセージが表示される
サンプルプログラムの実行_3

4) security-context.xmlに定義したユーザー同じユーザー名・パスワードを入力し、「ログイン」ボタンを押下
サンプルプログラムの実行_4

5) 以下のように、ログインでき、検索画面が表示されることが確認できるので、「ログアウト」ボタンを押下
サンプルプログラムの実行_5

6) 以下のように、ログイン画面に遷移することが確認できる
サンプルプログラムの実行_6

要点まとめ

  • Spring MVCプロジェクトでSpring Securityを利用するためには、必要なライブラリを追加し、web.xmlにSpring Securityのフィルタ設定を行うと共に、XMLの定義ファイル内で「sec:http」「sec:authentication-manager」といったタグを利用してSpringSecurityの定義を行う。
  • Spring SecurityのCSRFトークンを利用できるようにするには、HTMLファイル上でformタグ毎に1つ、「<input type=”hidden” th:name=”${_csrf.parameterName}” th:value=”${_csrf.token}”/>」というタグを追加する必要がある。