1. @EnableWebSecurity
- 역할 : Spring Security를 활성화하고 사용자 정의 보안 구성을 적용하기 위한 어노테이션입니다.
- 적용 위치 : 보안 설정 클래스에 사용.
- 주요 특징
WebSecurityConfigurerAdapter
또는 SecurityFilterChain
과 함께 사용됩니다.
- Spring Boot 애플리케이션에서는 자동으로 활성화되지만, 사용자 정의 보안 설정이 필요하면 명시적으로 선언해야 합니다.
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.anyRequest().authenticated()
.and()
.formLogin();
}
}
2. @PreAuthorize
- 역할 : 메소드 실행 전에 접근 권한을 확인합니다.
- 적용 위치 : 메소드 수준에서 사용.
- 주요 특징
- SpEL(Spring Expression Language)을 사용하여 복잡한 권한 조건을 정의할 수 있습니다.
- 조건이 만족되지 않으면 예외를 발생시킵니다.
@Service
public class MyService {
@PreAuthorize("hasRole('ADMIN')")
public void adminOnlyMethod() {
}
@PreAuthorize("#username == authentication.name")
public void userSpecificMethod(String username) {
}
}
3. @PostAuthorize
- 역할 : 메소드 실행 후 결과를 기반으로 권한을 확인합니다.
- 적용 위치 : 메소드 수준에서 사용.
- 주요 특징
- 메소드의 반환값을 평가하여 접근 권한을 결정합니다.
- 실행 결과를 필터링하거나 검증할 때 유용합니다.
@PostAuthorize("returnObject.owner == authentication.name")
public MyEntity findById(Long id) {
return myEntityRepository.findById(id);
}
4. @Secured
- 역할 : 특정 권한(역할)을 가진 사용자만 메소드에 접근할 수 있도록 제한합니다.
- 적용 위치 : 메소드 수준에서 사용.
- 주요 특징
- 단순한 역할 기반 접근 제어에 사용됩니다.
@Secured
는 SpEL을 지원하지 않으며, 역할을 문자열 배열로 지정해야 합니다.
@Secured({"ROLE_ADMIN", "ROLE_USER"})
public void securedMethod() {
}
5. @RolesAllowed
- 역할 : Java EE 표준 방식으로 역할 기반 접근 제어를 수행합니다.
- 적용 위치 : 메소드 수준에서 사용.
- 주요 특징
@Secured
와 비슷하지만 Java EE 표준을 따릅니다.
@RolesAllowed("ROLE_ADMIN")
public void adminMethod() {
}
6. @AuthenticationPrincipal
- 역할 : 현재 인증된 사용자 정보를 메소드 매개변수로 주입합니다.
- 적용 위치 : 컨트롤러나 서비스 메소드의 매개변수.
- 주요 특징
SecurityContext
에서 인증 정보를 가져옵니다.
- 사용자 정의
UserDetails
객체를 사용할 때 유용합니다.
@GetMapping("/user")
public String getUserInfo(@AuthenticationPrincipal UserDetails userDetails) {
return "Current user: " + userDetails.getUsername();
}
7. @EnableGlobalMethodSecurity
- 역할 : 메소드 수준에서 보안 어노테이션을 활성화합니다.
- 적용 위치 : 보안 설정 클래스에 사용.
- 주요 특징
@PreAuthorize
, @PostAuthorize
, @Secured
등의 어노테이션을 사용하려면 이 어노테이션이 필요합니다.
- 속성
prePostEnabled
: @PreAuthorize
와 @PostAuthorize
를 활성화 (기본값: false)
securedEnabled
: @Secured
를 활성화 (기본값: false)
jsr250Enabled
: @RolesAllowed
를 활성화 (기본값: false)
@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true, securedEnabled = true, jsr250Enabled = true)
public class MethodSecurityConfig extends WebSecurityConfigurerAdapter {
}
8. @WithMockUser
- 역할 : 테스트 환경에서 인증된 사용자로 동작하도록 설정합니다.
- 적용 위치 : JUnit 테스트 메소드.
- 주요 특징
- Mock 사용자 정보를 테스트 환경에서 간편하게 설정할 수 있습니다.
@RunWith(SpringRunner.class)
@SpringBootTest
public class MyServiceTest {
@Autowired
private MyService myService;
@Test
@WithMockUser(username = "testuser", roles = {"USER"})
public void testMethod() {
myService.userSpecificMethod("testuser");
}
}