티스토리 뷰

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()")**는 인증된 사용자만 해당 메서드에 접근할 수 있도록 제한하는 애너테이션입니다.
  • 로그인 여부를 확인하여 로그인한 사용자만 메서드 실행을 허용하고, 로그인하지 않은 사용자는 접근을 차단합니다.
  • 다양한 스프링 시큐리티 표현식을 사용하여, 더 세밀한 보안 제어가 가능합니다.

이를 통해 스프링 애플리케이션에서 메서드 레벨에서 접근을 제한할 수 있고, 보안 정책을 간단하게 적용할 수 있습니다.

728x90