【SpringSecurity】#2~ ユーザ毎の権限設定(認可)

当ページのリンクには広告が含まれています。
目次

概要

権限によって、アクセス可能なページを制限する機能の実装します。
管理者画面を作成し、権限によって画面の出し分けを行います。

前提

実装

管理者画面の作成

配置先:src/main/resources/templates/admin/index.html

イメージ

HTML

Controller
配置先:src/main/java/com/example/demo/controller/AdminController.java

セキュリティの設定

SecurityConfig.java

.antMatchers(“/admin/**”).hasAuthority(“ROLE_ADMIN”)
/admin以下のディレクトリは、ROLE_ADMINの権限を有するユーザのみ許可します。

出し分けの制御

SpringBootチュートリアルのヘッダーに管理画面用のリンクを追加して、
アドミン権限を持つユーザがログインした場合のみ表示されるようにします。

配置先:src/main/resources/templates/header.html

イメージ(ホーム画面)

HTML

以下、SpringBootチュートリアル > #4~ headerの作成と埋め込みに対する変更点です。

・xmlns:sec=”http://www.thymeleaf.org/extras/spring-security”
無くても実装上の問題にはならないが、
HTML5の定義にないことでIDE上に警告表示されることが無いようにする対処。

・<a sec:authorize=”hasRole(‘ROLE_ADMIN’)” th:href=”@{/admin/index}”>管理画面</a>
ユーザの権限がROLE_ADMINであればリンクが表示されるようにします。

テスト

  • ユーザ権限でログインし、管理画面のリンクが表示されないこと
  • ユーザ権限でログインし、管理画面のリンクを直接指定してもアクセスできないこと

    ※SpringBootチュートリアルを元にしているため、エラーページが表示されます。
  • 管理権限でログインし、管理画面のリンクが表示されること
  • 管理権限でログインし、管理画面のリンクをクリックしてアクセスできること

まとめ

  • アクセス可能なページをSecurityConfigで定義する。
  • 画面上で、権限を有するユーザのみ表示するにはhasRoleで定義する。
  • 権限のないユーザは、直接リンクであってもアクセスできない。

参考


後悔しないためのSpring Boot 入門書:Spring 解体新書(第2版): Spring Bootが丸分かり Spring解体新書

最後までお読み頂き、ありがとうございました!
ご意見・ご要望がありましたら、遠慮なくコメント下さい!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

リーマンショックの影響で26歳の時にIT業界から離れ、紆余曲折を経て34歳でエンジニアに復帰しました。
復帰前は開発未経験でしたが、独学した知識と面接時のコミュニケーション力で見事開発エンジニアとして復帰しました!
今はフリーランスエンジニアとして仕事をしています。

■保有資格
・Java Gold SE 11

コメント

コメントする

CAPTCHA


目次