HomeAboutMeBlogGuest
© 2025 Sejin Cha. All rights reserved.
Built with Next.js, deployed on Vercel
🤩
개발
/
🔐
Spring Security
/
🌚
Voter
🌚

Voter

notion image
  • WebExpressionVoter와 PIAAVoter가 주요. 나머지 2개는 deprecated될 것같음

RoleVoter

  • Role 기반의 권한은 리눅스부터 아파치, 톰켓등 IT 초기부터 전통적으로 구현해서 사용하던 가장 직관적인 권한 체계입니다. 하지만, Role 을 기반으로 권한을 판단하기엔, 상황이 너무 다양해졌죠. 그래서 Role 을 확장한 Authority 기반의 권한 체계를 사용하고 있습니다. 그렇지만, 기존의 Role 기반이 가지고 있는 직관적이고 계층적인 사용성을 그대로 사용할 수 있도록 해주기 위해 RoleVoter가 쓰입니다.

AuthenticatedVoter

  • 인증(통행증)을 받았다면 그 인증의 종류가 어떤 종류인지를 판단합니다. 이제 막 인증을 받고 들어온 사용자와 RememberMe 토큰을 통해서 들어온 사용자와 익명 사용자를 구분하기 위해 쓰입니다. RememberMe 인증 사용자는 탈취된 토큰을 가지고 들어온 사용자일 수 있기 때문에 필요한 경우 한번 더 인증을 요구할 수 있습니다.

SpEL을 사용하는 Voter (@PreAuthorize 어노테이션 기반)

Spring Expression Language
  • 하지만 RoleVoter 는 SpEL을 사용하는 WebExpressionVoter 나 PIAAVoter (PreInvocationAuthorizationAdviceVoter)가 사용성을 대체하고 있습니다.
notion image
package com.sp.fc.web.config; import org.springframework.stereotype.Component; @Component public class NameCheck { public boolean check(String name){ return name.equals("jongwon"); } } @PreAuthorize("@nameCheck.check(#name)") public String message(String name){ return name; }