티스토리 뷰
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
'Study > 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 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 원시값(primitive)
- 시맨틱 버전(semantic versioning
- core web vitals
- useEffect
- inp
- math.h
- Jest
- react
- x.y.z (메이저.마이너.패치)
- defaultdict
- counter
- ajax (asynchronous javascript and xml)
- react router
- pwa(progressive web app)
- 프로세스 강제 종료
- public vs assets
- named export vs default export
- Collections
- stdlib.h
- chrome extension 자동 배포
- styled-components
- structuredclone()
- 중첩 함수(nested function)
- mermaid-cli
- javascript 필수 문법
- json.parse(json.stringify())
- 소프트웨어 버전 관리
- 쉽게 풀어쓴 C언어 Express
- jackson 라이브러리
- semver)
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
글 보관함