
권한 설정
Admin > User > Visitor
{관리자>정회원>방문자}
@Bean
public RoleHierarchyImpl roleHierarchy() {
return RoleHierarchyImpl.fromHierarchy("""
ADMIN > USER > VISITOR
""");
}
위 코드에서 RoleHierarchyImpl는 Spring Security에서 제공하는 클래스이며, 권한 계층을 설정할 때 사용된다.
보다싶이 Impl이 붙어있기 때문에, 어떠한 인터페이스의 구현체일 것이다.
fromHierarchy는 RoleHierarchyImpl 클래스의 계층관계를 설정하는 메서드이다.
@Bean
public DefaultWebSecurityExpressionHandler customWebSecurityExpressionHandler() {
DefaultWebSecurityExpressionHandler expressionHandler = new DefaultWebSecurityExpressionHandler();
expressionHandler.setRoleHierarchy(roleHierarchy());
return expressionHandler;
}
DefaultWebSecurityExpressionHandler: Spring Security의 Expression Handler로, 권한 검사를 처리한다.
예를 들어, @PreAuthorize("hasRole('USER')")와 같은 어노테이션에서 권한 확인을 담당합니다.
setRoleHierarchy: 앞에서 설정한 RoleHierarchyImpl 객체를 등록합니다.
이를 통해 계층적인 권한 구조가 적용됩니다.
권한 계층 생성 빈을 계층 등록 빈에 넣어 DefaultWebSecurityExpressionHandler에 권한 계층을 등록한다.
Spring Security는 이 설정을 기반으로 권한을 검사한다.
@PreAuthorize("hasRole('VISITOR')")
public String visitorPage() {
return "visitorPage";
}
위에 있는 @PreAuthorize("hasRole('VISITOR')")
는 "메서드 보안 어노테이션 "이라고 부르며,
Spring Security의 메서드 보안 기능에서 제공되는 어노테이션 중 하나입니다
주로 컨트롤러 메서드와 서비스 메서드에서 사용된다.
컨트롤러의 API 메서드
@RestController
public class MyController {
@GetMapping("/visitor")
@PreAuthorize("hasRole('VISITOR')")
public String visitorEndpoint() {
return "Hello, Visitor!";
}
}
서비스의 메서드
@Service
public class MyService {
@PreAuthorize("hasRole('USER')")
public String getUserData() {
return "User Data";
}
}
다음과 같이 API와 메서드 접근을 제어하기 위해 사용된다.