Spring Boot セキュリティ関連

Spring BootのWEB画面上でリクエストトークンチェックを実行してみた

WEBアプリケーション上の画面にアクセスする際、そのアクセスが不正でないかチェックする方法として、リクエストトークンという何らかの文字列を利用して、セッション上のリクエストトークンと画面上のリクエストトークンが一致しているかどうかチェックする方法がある。

今回は、リクエストトークンチェックを含むサンプルプログラムを作成してみたので、共有する。

前提条件

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

IntelliJ IDEA上でGradleを使ってWeb画面のSpring Bootプロジェクトを作成してみたSpring Bootのプロジェクトを新規作成を「IntelliJ IDEA」のメニューから実施しようとしたところ、無料の「Commun...

完成した画面イメージ

今回作成したサンプルプログラムの画面イメージは、以下の通り。

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

2) next.html画面に遷移し、リクエストトークンの値が変わることが確認できるので、「戻る」ボタンを押下
サンプルプログラムの実行_2

3) index.html画面に戻り、リクエストトークンの値が再度変わることが確認できるので、更新ボタンを押下
サンプルプログラムの実行_3

4) 下記画面が表示されるので、「再試行」を押下
サンプルプログラムの実行_4

5) 2)の画面の「戻る」ボタン押下時の処理が再度実行され、下記トークンチェックエラーの画面に遷移することが確認できる
サンプルプログラムの実行_5

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

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

リクエストトークンのチェック処理を生成を行うInterceptorクラスの内容は、以下の通り。

また、リクエストが実行される度に先ほどのInterceptorクラスが呼ばれるような設定の内容は、以下の通り。

さらに、エラー画面に遷移するためのコントローラクラスの内容は、以下の通り。

また、リクエストトークンを設定するfragment.htmlの内容は、以下の通り。

さらに、index.html、next.htmlの内容は、以下の通りで、fragment.htmlのbody-tagの内容を読み込んでいる。

さらに、エラー画面のHTMLの内容は、以下の通り。

その他、コントローラクラスの内容は、以下の通り。

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

なお、今回のサンプルプログラムは、複数のウィンドウを開く場合に対応できていない。複数のウィンドウを開く場合に対応するプログラムについては、以下の記事を参照のこと。

Spring Boot上でリクエスト毎にCSRFトークンを変える処理を複数画面を開く場合に対応してみた以前、Spring Securityを利用して、さらにリクエスト毎にCSRFトークンの値を変更するようにしたことがあったが、このプログラ...

要点まとめ

  • WEBアプリケーションへのアクセスが不正でないかチェックする方法として、リクエストトークンをチェックする方法がある。
  • リクエストトークンは画面上とセッション上にもたせた上で、HandlerInterceptorインタフェースを実装したクラスで、リクエストトークンのチェックや生成を行えばよい。