본문 바로가기
개발관련

[Spring Security] canAccessUser 메서드

by 수바니 2024. 9. 4.

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

 

Spring Security Annotation (@Secured, @PreAuthorize, @PostAuthorize)

오늘은 인가처리 Annotation에 대해서 알아볼 것 입니다.이 어노테이션을 사용한다면 복잡한 코드가 간결하고 깔끔하게 완성가능합니다. 1. SecurityConfig파일에@EnableMethodSecurity(securedEnabled = true, prePo

java-kkwagjaba.tistory.com

 

 

 

 

'개발관련' 카테고리의 다른 글

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