본문 바로가기
Category/SpringBoot

타임리프 확장 기능 sec:authorize

by Corinee 2024. 9. 5.
728x90
반응형

sec:authorize는 **스프링 시큐리티(Spring Security)**와 **타임리프(Thymeleaf)**를 함께 사용할 때 사용자의 인증 및 권한 상태를 기반으로 특정 HTML 요소를 조건부로 출력할 수 있게 해주는 타임리프 확장 기능입니다.

이 속성은 사용자의 로그인 여부나 권한에 따라 해당 HTML 요소를 렌더링할지 여부를 제어합니다. sec:authorize는 스프링 시큐리티의 보안 기능을 HTML 템플릿에서 쉽게 활용할 수 있도록 도와줍니다.

주요 기능

  • sec:authorize="isAuthenticated()": 사용자가 로그인되어 있을 때만 해당 HTML 요소를 출력합니다.
  • sec:authorize="isAnonymous()": 사용자가 **로그인하지 않은 상태(익명)**일 때만 해당 HTML 요소를 출력합니다.
  • sec:authorize="hasRole('ROLE_USER')": 사용자가 특정 **권한(ROLE_USER)**을 가지고 있을 때 해당 HTML 요소를 출력합니다.

사용 예시

1. 로그인 상태에 따라 표시할 항목 제어

<a class="nav-link" sec:authorize="isAnonymous()" th:href="@{/user/login}">로그인</a> 
<a class="nav-link" sec:authorize="isAuthenticated()" th:href="@{/user/logout}">로그아웃</a>
  • 로그인하지 않은 경우(익명 사용자)에는 '로그인' 링크가 표시되고, 로그인된 경우에는 '로그아웃' 링크가 표시됩니다.

2. 특정 권한이 있는 사용자만 볼 수 있는 기능

<a class="nav-link" sec:authorize="hasRole('ROLE_ADMIN')" th:href="@{/admin}">관리자 페이지</a>
  • ROLE_ADMIN 권한이 있는 사용자에게만 '관리자 페이지' 링크가 표시됩니다.

주요 메서드

  • isAuthenticated(): 로그인한 사용자인지 확인합니다.
  • isAnonymous(): 익명 사용자(로그인하지 않은 사용자)인지 확인합니다.
  • hasRole('ROLE_NAME'): 사용자가 특정 권한을 가지고 있는지 확인합니다.
  • hasAuthority('AUTHORITY_NAME'): 권한(Authority)을 가지고 있는지 확인합니다. hasRole과 비슷하지만 더 세밀하게 권한을 지정할 수 있습니다.

요약

  • sec:authorize는 사용자의 인증 상태나 권한에 따라 HTML 요소의 표시 여부를 제어하는 타임리프 확장 기능입니다.
  • 이를 통해 로그인 상태에 따라 버튼이나 메뉴를 제어할 수 있고, 특정 권한을 가진 사용자만 접근할 수 있는 기능을 구현할 수 있습니다.