riku__02
@riku__02

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

Spring bootのSecurity(認可設定)についての質問

解決したいこと

現在解体新書という書籍にて11章のSpring セキュリティの内容に着手しています。
最後の内容で、画面表示の認可(権限による画面表示の切り替え)をやっています。
htmlにて修正を加えるだけで権限による制御ができる認識です。
(書籍でもhtmlのみしか修正はなく、サイトで他の方の実装ソース調べてもhtmlの修正のみで切り替えできていました)
しかし、一般ユーザでもボタンがでてきてしまいます。
image.png

原因がわからない状態です。。
解決方法、案がございましたら、指摘頂きたいです。
よろしくお願いいたします。

関連しそうなソース

■menu.html

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org"
  xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
  layout:decorate="~{layout/layout}"
  xmlns:sec="http://www.thymeleaf.org/extras/spring-security">
<head>
</head>
<body>
  <div layout:fragment="menu" class="bg-light">
    <ul class="nav nav-pills nav-stacked">
      <li role="presentation">
        <a class="nav-link" th:href="@{'/user/list'}">ユーザ一覧</a>
      </li>
      <li role="presentation" sec:authorize="hasRole('ADMIN')">
        <a class="nav-link" th:href="@{'/admin'}">アドミン専用</a>
      </li>
    </ul>
  </div>
</body>
</html>

該当するソースコード

■data.sql

INSERT INTO employee(id,name,age)
VALUES('1','Tom',30);

/*ユーザマスタ*/
INSERT INTO m_user (
	user_id
	,password
	,user_name
	,birthday
	,age
	,gender
	,department_id
	,role
) VALUES
('system@co.jp','$2a$10$LOyuZxpdrqRtijj2uutTvu8bRdAL.ugA2a059sTS2R9jkrmAlWBb2','システム管理者','2000-01-01',21,1,1,'ROLE_ADMIN')
,('user@co.jp','$2a$10$LOyuZxpdrqRtijj2uutTvu8bRdAL.ugA2a059sTS2R9jkrmAlWBb2','ユーザ1','2000-01-01',21,1,1,'ROLE_GENERAL')
;

/*部署マスタ*/
INSERT INTO m_department (
	department_id
	,department_name
) VALUES
(1,'システム管理部')
,(2,'営業部')
;

/*給料テーブル*/
INSERT INTO t_salary (
	user_id
	,year_month
	,salary
) VALUES
('user@co.jp','2020/11',280000)
,('user@co.jp','2020/12',290000)
,('user@co.jp','2021/01',300000)
;

自分で試したこと

spring securityの認可設定と調べてもhtmlのソース修正のみで実現できている方が多かったので、解決案が見つけられていません。。
キャッシュ等の問題かと思い、プライベートモードでの確認も実行しましたが、変化なしでした。

0

2Answer

@tomdog735
昨日に続きアドバイスありがとうございます。
まず結論として、管理者以外のユーザでログインし、管理者限定ボタンがでないことの確認ができました。
image.png

ブラウザのデベロッパーツールでhtmlのソースを表示し、sec:authorize="hasRole('ADMIN')"という記述がそのまま残っていたため、
pom.xmlで指定しているthymeleaf-extras-springsecuritを確認しました。
ご指摘の通り、thymeleaf-extras-springsecurity5としていたため、thymeleaf-extras-springsecurity6に変更したところ、上手くいきました。
これにてSpring securityの章は完了となりました。。
何度もアドバイス頂き本当にありがとうございました。内容を備忘として残して進めていきます!

1Like

ブラウザのデベロッパーツールでhtmlのソースを表示し、sec:authorize="hasRole('ADMIN')"という記述がそのまま残ってしまっているか確認してみてください。
残っている場合、pom.xmlで指定しているthymeleaf-extras-springsecurity周辺の依存関係に問題がありそうです。

恐らくですが、
thymeleaf-extras-springsecurity5はSpring Security5系統をターゲットとしているのに対し、
実際に依存関係に含まれているバージョンは6.3であるため問題があったのではないでしょうか。

継承しているspring-boot-starter-parentのバージョンを2.7辺りまで下げる(※お勧めしません)か、
或いは最新のthymeleaf-extras-springsecurity6を使用してみてください。

0Like

Your answer might help someone💌