JVM/Spring

[Spring] enum으로 @Secured 권한 관리

Hyo Kim 2022. 6. 18. 00:24
728x90
반응형

😀 서론

@Secured("ROLES_GUEST")

기존 권한 관리방법은 매직리터럴로 처리가 되어 있었습니다.

이는 오타날 가능성도 있고, 나중에 관리하기도 힘들다는 판단을 하였고, 이를 enum 으로 처리한 과정을 정리해봅니다.


🥸 본론

error message
Secured

@Secured 애노테이션의 value는 String[] 를 받도록 정의되어 있기 때문에 enum 값을 받지 못합니다.

 

그러면 어떻게 해야할까?

@RequiredArgsConstructor
public enum UserGrade {
	ADMIN(ROLES.ADMIN, null),
	STAFF(ROLES.STAFF, ROLES.ADMIN),
	GUEST(ROLES.GUEST, ROLES.STAFF);

	private final String roleName;
	private final String parentName;

	public static class ROLES {

		public static final String ADMIN = "ROLE_ADMIN";
		public static final String STAFF = "ROLE_STAFF";
		public static final String GUEST = "ROLE_GUEST";

		private ROLES() {
		}
	}
}

static inner class와 public static final 을 통해 구현하였습니다.

따로 Utils class 로 값들을 모아둘까도 생각해보았지만,

권한정보를 가지고 있는 enum class 에서 같이 관리하는 게 유지보수 측면에서 장점이 있다고 생각했습니다.

 

사용

@Secured(ROLES.GUEST)
public ..

@Secured(UserGrade.ROLES.GUEST)
public ..

두 가지 방식 다 사용할 수 있지만, 개인적으로는 두 번째가 길긴 해도 한 번에 알아보기 좋을 것 같습니다.


🤔 결론

별도 Util Class를 만들 수도 있지만, 유지보수를 생각해 enum 안에서 구현하는 방법으로 처리했습니다.

 

참고

728x90
반응형