canAccessUser 메서드는 Spring Security에서 자주 사용하는 커스텀 메서드 입니다.
특정 사용자가 다른 사용자에게 접근할 수 있는 권한이 있는지를 판단하는 로직을 포함합니다.
이는 일반적으로 서비스 계층에 정의된 메서드로, 보통 @PreAuthorize와 함께 사용되어 더 복잡한 접근 제어 로직을 구현할 때 사용합니다.
@Service
public class SecurityService {
public boolean canAccessUser(String currentUsername, Long userId) {
// 여기서는 currentUsername(현재 로그인한 사용자 이름)과 userId로 접근 가능한지 여부를 판단
User user = userRepository.findById(userId)
.orElseThrow(() -> new UsernameNotFoundException("사용자를 찾을 수 없습니다."));
return user.getUsername().equals(currentUsername) || currentUsername.equals("admin");
}
}
위의 SecurityService 클래스에서 canAccessUser 메서드는 특정 사용자가 해당 사용자 ID에 대한 접근 권한이 있는지를 확인합니다. 이 메서드를 @PreAuthorize와 함께 사용하면 다음과 같은 방식응로 복잡한 권한 체크를 할 수 있습니다.
@PreAuthorize("@securityService.canAccessUser(principal.username, #userId)")
public ResponseEntity<UserResponseDto> getUser(@PathVariable Long userId) {
UserResponseDto responseDto = userService.getUser(userId);
return ResponseEntity.ok(responseDto);
}
여기서 @securityService는 스프링 컨텍스트에 등록된 SecurityService 빈을 참조하고, canAccessUser 메서드를 호출하여 현재 사용자가 해당 사용자 정보에 접근할 수 있는지 확인합니다.
@PreAuthorize는 Spring Security에서 메서드 접근을 제어하는 강력한 도구로, 메서드 파라미터나 스프링 컨텍스트의 데이터를 활용하여 조건을 설정할 수 있습니다.
#을 사용하여 메서드 파라미터의 필드에 접근하거나, 스프링 빈을 통해 커스텀 검증 로직을 수행할 수 있습니다.
#를 사용하는 방법은
https://java-kkwagjaba.tistory.com/24
'개발관련' 카테고리의 다른 글
DDD란? (1) | 2024.09.06 |
---|---|
JPA) JPA Auditing 사용하기 (1) | 2024.09.05 |
[Spring Security] @Secured, @PreAuthorize, @PostAuthorize (0) | 2024.09.04 |
CI/CD 란 무엇인가 ? (0) | 2024.08.19 |
Docker 명령어에 대해서 알아보자. (0) | 2024.08.14 |