스프링 데이터레스트 - 지원되는 작동을 제한할 수 있는 방법이 있습니까?
데이터베이스의 데이터를 Spring(SpringBoot) 응용 프로그램의 Restful API로 노출하고 싶습니다.Spring Data Rest는 이 활동의 목적에 딱 맞는 것으로 보입니다.
이 데이터베이스는 응용프로그램의 필요에 따라 읽기 전용입니다.기본값은 모든 HTTP 메서드를 제공합니다.다른 방법이 노출되지 않도록 제한(실제로 방지)하는 데 사용할 수 있는 구성이 있습니까?
저장소 CRUD 메서드 숨기기에 대한 Spring 문서에서:
16.2.3. 저장소 CRUD 방법 숨기기
CrudRepository에서 저장 또는 삭제 메서드를 노출하지 않으려면 해제할 메서드를 재정의하고 주석을 재정의 버전에 배치하여 @RestResource(내보냄 = false) 설정을 사용할 수 있습니다.예를 들어 HTTP 사용자가 CrudRepository의 삭제 메서드를 호출하지 못하도록 하려면 모든 메서드를 재정의하고 주석을 재정의된 메서드에 추가합니다.
@RepositoryRestResource(path = "people", rel = "people") interface PersonRepository extends CrudRepository<Person, Long> { @Override @RestResource(exported = false) void delete(Long id); @Override @RestResource(exported = false) void delete(Person entity); }
내보내기 기능은 현재 더 빠른 런타임 성능을 위해 사용할 CRUD 방법을 결정하기 위해 다소 단순한 알고리즘을 사용하므로 두 삭제 방법을 모두 재정의하는 것이 중요합니다.현재 ID를 사용하는 delete 버전을 해제할 수 없지만 엔티티 인스턴스를 사용하는 내보낸 버전은 그대로 둘 수 없습니다.당분간은 삭제 방법을 내보낼 수도 있고 내보낼 수도 없습니다.이러한 기능을 해제하려면 내보낸 = false로 두 버전에 주석을 달아야 합니다.
2018년 초 현재, 노출을 위해 명시적으로 선언된 저장소 메서드만 노출할 수 있는 기능이 있습니다.DATAREST-1176
)
리포지토리 복원 구성 참조
유형 수준에서 내보내기 false는 메서드 수준 티켓에서 내보내기 true로 재정의할 수 없습니다.DATAREST-1034
의 .DATAREST-1176
올리버 지어케는 다음과 같이 말했습니다.
현재로서는 DATAREST-1176 버전과 비교하여 수정된 것으로 해결하겠지만, 필요한 다른 사항이 있을 경우 언제든지 다시 여십시오.
은 정확한 은 한항아에설기능다니입명에 설명되어 .1034
좀 더 사용하기 쉬웠겠지만, 지금은 최소한 몇 가지 옵션이 있습니다.
Spring Data REST 3.1부터는 HTTP 방식별로 노출을 구성할 수 있습니다.다음 스니펫을 사용하여 항목 및 컬렉션에 대한 PUT, PATCH, POST 및 DELETE 메서드의 노출을 비활성화했습니다.
@Component
public class SpringDataRestCustomization implements RepositoryRestConfigurer {
@Override
public void configureRepositoryRestConfiguration(RepositoryRestConfiguration config, CorsRegistry cors) {
ExposureConfiguration exposureConfiguration = config.getExposureConfiguration();
exposureConfiguration.withItemExposure((metadata, httpMethods) -> httpMethods.disable(HttpMethod.PUT)
.disable(HttpMethod.PATCH).disable(HttpMethod.POST).disable(HttpMethod.DELETE))
.withCollectionExposure((metadata, httpMethods) -> httpMethods.disable(HttpMethod.PUT)
.disable(HttpMethod.PATCH).disable(HttpMethod.POST).disable(HttpMethod.DELETE));
}
}
기본적으로 Spring boot은 모든 메서드를 REST에 노출시킵니다.거짓으로 설정할 수 있습니다.
config.setExposeRepositoryMethodsByDefault(false);
자세한 내용은 org.springframework.data.rest.core.config를 참조하십시오.리포지토리 복원 구성입니다.
이를 위한 샘플 코드 조각:
@Configuration
public class ApplicationRepositoryConfig implements RepositoryRestConfigurer {
@Override
public void configureRepositoryRestConfiguration(RepositoryRestConfiguration config, CorsRegistry cors) {
..........
config.setExposeRepositoryMethodsByDefault(false);
}
}
언급URL : https://stackoverflow.com/questions/42506546/spring-data-rest-is-there-a-way-to-restrict-the-supported-operations
'programing' 카테고리의 다른 글
선택한 문에 트랜잭션을 사용하시겠습니까? (0) | 2023.06.22 |
---|---|
다른 도메인의 다른 페이지에 PHP 페이지의 div 로드 (0) | 2023.06.22 |
JSON 시리즈화 Mongodb (0) | 2023.06.22 |
아이폰의 반환 키를 키보드가 사라지게 만드는 방법은 무엇입니까? (0) | 2023.06.22 |
GCC의 정렬된 malloc()? (0) | 2023.06.22 |