2014-03-28 3 views
4

데이터베이스에 일부 액세스 제어 정보를 유지하는 프로젝트에서 작업 중입니다. 우리는 액세스 제어 정보를 사용하여 사용자가 볼 수있는 것을 필터링합니다. 현재 사용중인 필터는 사용자의 역할을 기반으로합니다. Spring Data에서 제공하는 Repository 추상화를 사용하고자하지만 생성 된 쿼리를 실행하기 전에이를 조정할 수 있기를 원합니다. 쿼리가 실행되기 전에 호출 될 리스너 또는 인터셉터를 첨부 할 수 있습니까? 이렇게하면 쿼리 개체에 대한 참조를 가져올 수 있으며 쿼리가 실행되기 전에 필요한 쿼리를 조정할 수 있습니다.스프링 데이터 jpa - 실행 전 쿼리 수정

here과 같이 SimpleJpaRepository를 재정의 할 수 있도록 우리 자신의 JpaRepositoryFactoryBean을 만드는 것이 우리가 생각하고있는 것입니다. 우리는 SimpleJpaRepository.getQuery를 오버라이드하여 쿼리를 조정합니다. 그런 다음 생성 된 모든 파인더 메서드에 대해 PartTreeJpaQuery을 확장하고 PartTreeJpaQuery $ QueryPreparer를 재정의하려고했습니다. QueryPreparer에서 QueryPreparer.createQuery 메소드를 대체합니다. 쿼리가 실행되기 전에 모든 쿼리에 액세스하는 가장 간단한 방법인지는 확실하지 않았습니다.

org.springframework.data.repository.core.support.QueryCreationListener를 추가하려고 생각했지만 쿼리가 생성 될 때만 실행됩니다. 우리는 좀 더 역동적 인 것이 필요하다고 생각합니다.

답변

1

이미 알지만 스프링 데이터 팀은 스프링 보안 팀이 ACL에 대한 지원을 추가 할 수 있도록 다음 릴리스에서이 기능을 사용하고 있는지 잘 모르겠습니다.

Add infrastructure for generic query augmentation

에 의해 차단

봄 보안 문제 이전 : 내 회사에서 Spring Security/Spring Data Acl Integration

, 우리는, 우리가 ACL에 대한 필터를 추가 할 수 있도록 사용자 정의 저장소를 만들 것 JpaRepositoryFactoryBean을 만들었지 만 우리는 findAll과 findOne 메소드를 위해 그렇게했습니다. 그래서 우리는 Spring Data의 많은 기능을 잃어 버렸고 그 변화를 되돌리기로 결정했습니다. 우리는 여전히 자동으로 그렇게 할 생각입니다. 너무 어려울 것이라는 것을 알게되면 리포지토리 고객에게 책임을 위임하고 Spring Security/Data에서 지원을 기다리게 될 것입니다.

원래 질문은 이미 1 년입니다. 그것을 할 수있는 깔끔한 방법을 찾았습니까?

관련 문제