プログラミング逆引き辞典

~ 多言語対応のプログラミングレシピ ~

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>