Spring Boot Thymeleaf Extras Springsecurity5
認証ユーザー情報を取得・表示したり、ユーザーの権限によって画面の表示項目を表示・非表示にすることが可能
■build.gradleへ下記を記述
記述場所:dependencies
記述コード:
implementation 'org.thymeleaf.extras:thymeleaf-extras-springsecurity5'
■Thymeleafに下記を記述①
<html xmlns:th="http://www.thymeleaf.org"
xmlns:sec="http://www.thymeleaf.org/extras/spring-security">
■Thymeleafに下記を記述②
sec:authentication属性で認証ユーザー情報にアクセス可能
principalプロパティでUserDetailsオブジェクトにアクセスできるので認証の際に使用したTbTrnEmployee型の「tbTrnEmployee」を使用して下記のように記述して、ユーザー名を取得できる
sec:authorize="hasRole(‘権限名’)"でその権限名を保持している認証ユーザーの場合にのみ表示させることが可能
【使用例】
UserDetailsの実装クラスである「LoginUserDetails.java」
package com.example.security;
import org.springframework.security.core.authority.AuthorityUtils;
import org.springframework.security.core.userdetails.User;
import com.example.domain.TbTrnEmployee;
import lombok.Data;
import lombok.EqualsAndHashCode;
/***
* ログイン認証ユーザークラス
*/
@Data
@EqualsAndHashCode(callSuper=false)
public class LoginUserDetails extends User {
//社員テーブルから取得したオブジェクトを格納
private final TbTrnEmployee tbTrnEmployee;
//認証処理
public LoginUserDetails(TbTrnEmployee tbTrnEmployee, String role) {
super(tbTrnEmployee.getEmail(), tbTrnEmployee.getEncodePassword(), AuthorityUtils.createAuthorityList(role));
this.tbTrnEmployee = tbTrnEmployee;
}
}
「home.html」
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org"
xmlns:sec="http://www.thymeleaf.org/extras/spring-security">
.
.
<!-- 認証ユーザー情報を表示 -->
<div><span sec:authentication="principal.tbTrnEmployee.name"></span>さん ログイン中</div>
.
.
<!-- ADMIN権限を保持している場合は表示 -->
<div sec:authorize="hasRole('ADMIN')">管理者ページ</div>