728x90
반응형
@PreAuthorize("조건")는 **스프링 시큐리티(Spring Security)**에서 제공하는 메서드 보안 애너테이션입니다. 이 애너테이션은 메서드가 실행되기 전에 특정 보안 조건을 평가하여, 조건이 참일 때만 메서드를 실행하게 합니다. isAuthenticated()는 사용자가 인증된 상태인지를 확인하는 스프링 시큐리티의 표현식입니다. 즉, @PreAuthorize("isAuthenticated()")은 로그인한 사용자만 해당 메서드를 사용할 수 있도록 제한합니다.
동작 원리
- @PreAuthorize는 메서드가 실행되기 전에 특정 권한이나 조건을 체크하는 역할을 합니다.
- "isAuthenticated()"는 사용자가 인증된 상태(즉, 로그인한 상태)임을 확인하는 조건식입니다.
- 따라서 @PreAuthorize("isAuthenticated()")는 로그인하지 않은 사용자가 이 메서드에 접근하려고 하면 접근이 거부됩니다.
사용 예시
1. 컨트롤러 메서드에 적용
@GetMapping("/profile")
@PreAuthorize("isAuthenticated()")
public String profile() {
return "profilePage";
}
- 위 코드에서 /profile 페이지에 접근하려면 로그인된 상태여야 합니다.
- 로그인하지 않은 사용자가 이 메서드를 호출하면, 스프링 시큐리티가 자동으로 접근을 차단하고 로그인 페이지로 리다이렉트 시키거나 403 Forbidden 오류를 반환합니다.
2. 서비스 레이어에 적용
@PreAuthorize는 컨트롤러뿐만 아니라 서비스 레이어에서도 사용할 수 있습니다. 예를 들어, 특정 비즈니스 로직을 로그인한 사용자만 사용할 수 있도록 제한할 수 있습니다.
@Service
public class UserService {
@PreAuthorize("isAuthenticated()")
public void updateProfile(User user) {
// 인증된 사용자만 이 메서드를 호출할 수 있음
// 사용자 프로필 업데이트 로직
}
}
- updateProfile 메서드는 로그인된 사용자만 호출할 수 있습니다.
- 인증되지 않은 사용자가 이 메서드를 호출하면 스프링 시큐리티에 의해 접근이 차단됩니다.
@PreAuthorize의 추가 활용
@PreAuthorize는 단순히 isAuthenticated()만 사용할 수 있는 것이 아니라, 스프링 시큐리티의 다양한 표현식을 활용하여 메서드 보안을 더욱 세밀하게 설정할 수 있습니다.
- 권한 확인: 특정 권한을 가진 사용자만 접근할 수 있도록 설정할 수 있습니다.
@PreAuthorize("hasRole('ROLE_ADMIN')")
public String adminPage() {
return "adminPage";
}
- 파라미터 기반 접근 제어: 메서드의 파라미터를 기반으로 접근을 제어할 수 있습니다.
@PreAuthorize("#user.username == authentication.name")
public void editProfile(User user) {
// 자신의 프로필만 수정할 수 있음
}
요약
- **@PreAuthorize("isAuthenticated()")**는 인증된 사용자만 해당 메서드에 접근할 수 있도록 제한하는 애너테이션입니다.
- 로그인 여부를 확인하여 로그인한 사용자만 메서드 실행을 허용하고, 로그인하지 않은 사용자는 접근을 차단합니다.
- 다양한 스프링 시큐리티 표현식을 사용하여, 더 세밀한 보안 제어가 가능합니다.
이를 통해 스프링 애플리케이션에서 메서드 레벨에서 접근을 제한할 수 있고, 보안 정책을 간단하게 적용할 수 있습니다.
'Category > SpringBoot' 카테고리의 다른 글
| 스프링 부트 시작 옵션 spring.profiles.active (0) | 2024.09.09 |
|---|---|
| 스프링 시큐리티 #authentication.getPrincipal() (0) | 2024.09.06 |
| 스프링 시큐리티 Principal (0) | 2024.09.05 |
| 타임리프 확장 기능 sec:authorize (0) | 2024.09.05 |
| 스프링 시큐리티 .invalidateHttpSession(true) (0) | 2024.09.05 |