Spring Boot セキュリティ関連

Spring Securityで権限制御を実装してみた

今回は、Spring Securityで一般ユーザーと管理者ユーザーを用意し、管理者ユーザーのみアクセスできる画面の制御を実装してみたので、そのサンプルプログラムを共有する。

前提条件

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

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

また、以下の構成のuser_passテーブルが作成されていること。
user_pass_desc

参考ソース

Spring Securityの実装は、下記記事の実装も参照のこと。

Spring Boot上でSpring Securityのエラー処理を追加してみた今回は、Spring Securityでエラーが発生した場合に、エラー画面に遷移する処理を追加してみたので、そのサンプルプログラムを共有...

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

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

Spring Securityの設定ファイルの内容は以下の通りで、管理者ユーザー向けのアクセスパス「/has_admin_auth」を、管理者権限(ADMIN)をもつユーザーのみアクセス可能にしている。

また、コントローラクラスの内容は以下の通りで、ログイン画面に遷移する際に、一般ユーザーと管理者ユーザーを登録する仕様になっている。

このサンプルプログラムを実行すると、一般ユーザーと管理者ユーザーは、user_passテーブルに、以下のように登録される。
user_passテーブルデータ

さらに、user_passテーブルへのアクセスに関連する部分の内容は、以下の通り。

また、HTMLファイルの内容は、以下の通り。

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

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

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

1) Spring Bootアプリケーションを起動し、「http://(サーバー名):(ポート番号)/」とアクセスし、一般ユーザーの「user」でログイン
サンプルプログラムの実行結果_1

2) 初期表示画面に遷移するので、「一般ユーザーの画面へ」ボタンを押下
サンプルプログラムの実行結果_2

3) 一般ユーザーの画面に遷移することが確認できる。ここで「戻る」ボタンを押下
サンプルプログラムの実行結果_3

4) 初期表示画面に戻るので、「管理者ユーザーの画面へ」ボタンを押下
サンプルプログラムの実行結果_4

5) 管理者ユーザーの画面に遷移しようとするが権限が無く、下記エラー画面に遷移する。ここで「戻る」ボタンを押下
サンプルプログラムの実行結果_5

6) 初期表示画面に戻るので、「ログアウト」ボタンを押下
サンプルプログラムの実行結果_6

7) 以下のように、ログイン画面に戻ることが確認できる
サンプルプログラムの実行結果_7

8) ログイン画面で管理者ユーザーの「admin」でログイン
サンプルプログラムの実行結果_8

9) 初期表示画面に遷移するので、「一般ユーザーの画面へ」ボタンを押下
サンプルプログラムの実行結果_9

10) 一般ユーザーの画面に遷移することが確認できる。ここで「戻る」ボタンを押下
サンプルプログラムの実行結果_10

11) 初期表示画面に戻るので、「管理者ユーザーの画面へ」ボタンを押下
サンプルプログラムの実行結果_11

12) 管理者ユーザーの画面に遷移することが確認できる。ここで「戻る」ボタンを押下
サンプルプログラムの実行結果_12

13) 初期表示画面に戻るので、「ログアウト」ボタンを押下
サンプルプログラムの実行結果_13

14) 以下のように、ログイン画面に戻ることが確認できる
サンプルプログラムの実行結果_14

要点まとめ

  • Spring Securityによる権限制御を行うには、http.authorizeRequests()オブジェクトのmvcMatchersメソッドでアクセスパスを指定し、hasAuthorityメソッドで権限設定を行えばよい。