본문 바로가기

Language/Spring Security

메서드 기반 권한 부여 - @PreFilter, @PostFilter

728x90

@PreFilter

  • @PreFilter 어노테이션은 메소드가 실행되기 전에 메소드에 전달된 컬렉션 타입의 파라미터에 대한 필터링을 수행하는데 사용
  • @PreFilter 어노테이션은 주로 사용자가 보내온 컬렉션(배열, 리스트, 맵, 스트림) 내의 객체들을 특정 기준에 따라 필터링하고 그 중 보안 조건을 만족하는 객체들에 대해서만 메소드가 처리하도록 할 때 사용
@PreFilter("filterObject.owner == authentication.name")
public Collection<BankAccount> updateAccounts(BankAccount[] data){
	return data;
}

@PreFilter("filterObject.owner == authentication.name")
public Collection<BankAccount> updateAccounts(Collection<BankAccount> data){
	return data;
}

@PreFilter("filterObject.value.owner == authentication.name")
public Collection<BankAccount> updateAccounts(Map<String, BankAccount> data){
	return data;
}

@PreFilter("filterObject.owner == authentication.name")
public Collection<BankAccount> updateAccounts(Stream<BankAccount> data){
	return data;
}

@PostFilter

  • @PostFilter 어노테이션은 메소드가 반환하는 컬렉션 타입의 결과에 대해 필터링을 수행하는 데 사용
  • @PostFilter 어노테이션은 메소드가 컬렉션을 반환할 때 반환되는 각 객체가 특정 보안 조건을 충족하는지 확인하고 조건을 만족하지 않는 객체들을 결과에서 제거
@PostFilter("filterObject.owner == authentication.name")
public List<BankAccount> readAccounts1(){
	return dataService.readList();
}

@PostFilter("filterObject.value.owner == authentication.name")
public Map<String, BankAccount> readAccounts2(){
	return dataService.readMap();
}

정리

  • @PreFilter는 입력받은 컬렉션을 검증하여 보안 조건을 만족하는 데이터만 반환
  • @PostFilter는 반환할 컬렉션에서 보안 조건을 만족하지 않는 객체들을 제거 후 반환
728x90