programing

스프링 데이터레스트 - 지원되는 작동을 제한할 수 있는 방법이 있습니까?

powerit 2023. 6. 22. 22:30
반응형

스프링 데이터레스트 - 지원되는 작동을 제한할 수 있는 방법이 있습니까?

데이터베이스의 데이터를 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

반응형