스프링에서 권한 체크를 좀 더 깔끔하게 하고 싶어서,
어노테이션으로 역할(Role)을 체크하는 방식으로 만들어봤다.
@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface CheckRole {
String value();
}
@Target → 클래스, 메서드 둘 다 타겟 가능
@Retention(RetentionPolicy.RUNTIME) → 어노테이션 정보를 런타임에도 유지
왜 필요하냐면, 나중에 AOP로 이 어노테이션을 읽어서 권한 체크를 할 건데
이게 런타임에 메모리에 있어야 리플렉션으로 읽을 수 있다. 만약 이걸 안 쓰면 컴파일 후 .class 파일엔 남아있지만, 실행 중엔 JVM이 이 정보를 못 읽는다.
ex)
@CheckRole("ROLE_ADMIN")
@GetMapping("/admin")
public String adminOnlyApi() {
return "관리자 전용 API입니다.";
}
@CheckRole("ROLE_SUPER")
@RequestMapping("/api/admin")
@RestController
public class AdminController {
}
다음 단계: RoleCheckAspect
이제 어노테이션은 준비됐고, 진짜 핵심인 AOP 구현만 남았다.
RoleCheckAspect를 만들어서, 메서드 실행 전에 권한 체크 로직을 태우면 된다.
이 부분은 다음 글에서...