Spring Securityで、ログインしているロールごとに表示する要素を変えたい場合、thymeleaf-extras-springsecurityというartifactを使うことでview側で簡単に制御できます。
調べたとおり、以下の用に依存を書いて、
<dependency> <groupId>org.thymeleaf.extras</groupId> <artifactId>thymeleaf-extras-springsecurity4</artifactId> <version>3.0.4.RELEASE</version> </dependency>
Thymeleafのテンプレートで以下のように書いてみます。もちろん「でたらめなロール」は存在しないロールなので表示されないことを期待しています。
<div sec:authorize="hasRole('ROLE_SAMURAISM_ADMIN')">This is Admin</div> <div sec:authorize="hasRole('ROLE_SAMURAISM_EMPLOYEE')">This is employee</div> <div sec:authorize="hasRole('ROLE_SAMURAISM_でたらめなロール名')">デタラメ</div>
さて、表示してみると、あれ?
「デタラメ」が表示されてしまいました。
GitHubのreadmeを見てみると
thymeleaf-extras-springsecurity3はSpring Security 3.x用、
thymeleaf-extras-springsecurity4は4.x用、
thymeleaf-extras-springsecurity5は5.x用、
とのことでした。使っているSpring Bootのバージョンは2.4.2、/Securityのバージョンは5.4.2だったので、thymeleaf-extras-springsecurity4ではなくてthymeleaf-extras-springsecurity5を使うべきでした。
最後の数字を間違えてもバージョン番号は同じものが用意されており、さらに例外も発生しないのでちょっとはまりどころですね。
以下のように修正することで正常に動作しました。
<dependency>
<groupId>org.thymeleaf.extras</groupId>
<artifactId>thymeleaf-extras-springsecurity5</artifactId>
<version>3.0.4.RELEASE</version>
</dependency>