[SPRING] Spring 데이터 Rest : 사용자 자원 반환
SPRINGSpring 데이터 Rest : 사용자 자원 반환
나는 Spring Boot와 Spring Data Rest와 함께 간단한 CRUD-App (쇼핑 목록)을 만들고있다. 나는 자원이있다 : ShoppingItem. 요청을 보내는 사용자에게 속한 리소스 만 반환하는 쉬운 방법이 있습니까? (다중 사용자 지원) 따라서 사용자는 모든 ShoppingItem이 아닌 자신의 ShoppingItems 만 가져옵니다. 아니면 내가 직접 컨트롤러를 구현해야합니까?
사용자를 기반으로 리소스를 필터링하기 위해이 접근 방식을 기반으로 데이터를 필터링하는 Spring Data REST를 발견했으나 저장소 엔드 포인트에 도움이되지 않습니다.
미리 감사드립니다.
해결법
-
==============================
1.Spring 보안 통합을 사용한다면 다음과 같이 ACL (무겁거나) 또는 간단한 postFilter를 사용할 수 있습니다 :
Spring 보안 통합을 사용한다면 다음과 같이 ACL (무겁거나) 또는 간단한 postFilter를 사용할 수 있습니다 :
public interface ShoppingItemRepository extends CrudRepository<ShoppingItem, Long> { @PostFilter("filterObject.user.getId() == principal.id") @Override Iterable<ShoppingItem> findAll(); }
-
==============================
2.나는 최근에이 문제를 해결했다. Spring 데이터 Rest Override Repositories (컨트롤러 대 AOP)
나는 최근에이 문제를 해결했다. Spring 데이터 Rest Override Repositories (컨트롤러 대 AOP)
내가 찾은 가장 우아한 해결책은 QueryDSL과 Spring Data REST Repository를 가지고 AOP를 사용하는 것이다.
@Aspect @Transactional @Component public class FilterProjectsAspect { @Pointcut("execution(* com.xxx.ProjectRepository.findAll(..))") public void projectFindAll() { } @Around("projectFindAll()") public Object filterProjectsByUser(final ProceedingJoinPoint pjp) throws Throwable { Object[] args = pjp.getArgs(); for (int i = 0; i < args.length; i++) { if (args[i] instanceof Predicate) { Predicate predicate=(Predicate) args[i]; BooleanExpression isProjectOwner =buildExpressionForUser() predicate = ExpressionUtils.allOf(isProjectOwner, predicate); args[i]=predicate; //Update args } return pjp.proceed(args); } }
-
==============================
3.몇 가지 이유로 컨트롤러를 구현하는 것이 좋습니다.
몇 가지 이유로 컨트롤러를 구현하는 것이 좋습니다.
from https://stackoverflow.com/questions/30834138/spring-data-rest-return-resources-of-user by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] Java 프로젝트 : ApplicationContext를로드하지 못했습니다. (0) | 2019.03.18 |
---|---|
[SPRING] 바람둥이에 봄 mvc 응용 프로그램에 대한 응용 프로그램 루트 변경 (0) | 2019.03.18 |
[SPRING] CrudRepository와 Hibernate : 트랜잭션에 save (Entity)를 저장 (List <S>) (0) | 2019.03.18 |
[SPRING] Spring MVC, 하나의 설정 대신 두 개의 설정 인스턴스 (0) | 2019.03.17 |
[SPRING] Spring 3 / Spring Security 2.0.5에서 세션 시간 초과 감지 (0) | 2019.03.17 |