본문 바로가기
Spring

Spring - @EnableGlobalMethodSecurity

by 오늘부터개발시작 2022. 8. 14.

 

 

 

 

Spring Security 두가지 방법

Spring에서는 Web 기반의 Security과 Method 기반의 Security 기능을 제공한다. 메소드 기반은 메소드 별로 권한을 체크하는데 Web 기반과 다르게 필터가 아닌 컨트롤러 단에서 권한을 처리하는 기능이다. 두개의 Security 적용 방식은 하나만 선택하는게 아니라 동시에 섞어서 사용할 수 있다. Web Security에서 URL과 Token 유무로 인증을 하고 Method Security를 사용해서 권한에 따라 인가를 하는 방법이 있다. Rest api에서는 Web Security에서도 권한에 따라 인가를 처리할 수 있기 때문에(antMatcher 사용) 굳이 메소드 기반을 같이 사용하지 않아도 된다. 오늘은 두가지 방법 중에서 @EnableGlobalMethodSecurity에 대해서 알아보도록하겠다.

 

 

 

@EnableGlobalMethodSecurity

 

 

@EnableGlobalMethodSecurity는 Spring AOP proxy를 사용해 구현된 방법이다. 사용하는 방법에는 총 3가지가 있는데 3가지 방법을 모두 한번에 사용할 수도 있다. 3가지에는 securedEnabled, prePostEnabled, jsr250Enabled라는 설정이 있다. 각각의 특징에 대해서 살펴보도록하자.

 

1. securedEnabled - @Secured

- @Secured 어노테이션으로 인가를 처리하고 싶을 때 true로 설정한다.

- @Secured는 Spring Security2의 legacy 어노테이션이다.

- @Secured는 SpEL(Spring Expression Languge를 지원하지 않는다.

- @Secured는 한 번에 여러가지 Role으로 인가 처리를 할 수 있다. 예시: (ROLE_ADMIN, ROLE_USER를 가진 유저 모두 )

- 그러나 Legacy이기 때문에 prePostEnabled를 사용하는 것이 권장된다. 

 

2. prePostEnabled - @PreAuthorize

- @PreAuthorize를 사용하기 위해서 true로 설정한다.

- @PreAuthorize는 SpEL을 사용해서 인가처리가 가능하다. 

- @PreAuthorize는 스프링 시큐리티 프레임워크에 일부이다.

 

SpEL 예시

@PreAuthorize("hasRole('ADMIN') or #user.id == authentication.name")

 

3. jsr250Enabled - @RolesAllowed

- @RolesAllowed를 사용하기 위해서 true 설정과 스프링 시큐리티 기능이 아니기 때문에 관련된 라이브러리가 설치되어 있어야한다.

- @RolesAllowed는 JSR-250 Java Security Standard에 기초하고 있고 role-based 인가 기능만 있기 때문에 @PreAuthorize 어노테이션보다 제약이 많다.