복붙노트

[SPRING] Spring Data REST를 사용하는 REST API 전용 사용자 정의 기본 헤더

SPRING

Spring Data REST를 사용하는 REST API 전용 사용자 정의 기본 헤더

내 응용 프로그램이 REST API 및 웹 응용 프로그램을 호스팅하는 유스 케이스가 있고 우리는 REST API에만 사용자 정의 헤더를 추가해야합니다. REST API는 Spring Data REST를 통해 사용할 수있다. 일반적으로 Servlet Filter를 사용하여이를 구현할 수 있지만 요청을 REST API에 격리하고 사용자 정의 헤더를 추가하는 로직을 코딩해야합니다. Spring Data REST API가 생성하는 모든 응답에 기본 헤더를 추가 할 수 있다면 좋을 것입니다. 당신의 생각은 무엇입니까? 내가 게으른다고 말하지 마 :)

해결법

  1. ==============================

    1.Spring Data REST는 Spring MVC 위에 구축되기 때문에 가장 쉬운 방법은 참조 문서에 설명 된대로 사용자 정의 HandlerInterceptor를 구성하는 것이다.

    Spring Data REST는 Spring MVC 위에 구축되기 때문에 가장 쉬운 방법은 참조 문서에 설명 된대로 사용자 정의 HandlerInterceptor를 구성하는 것이다.

    Spring Data REST를 사용하면 가장 쉬운 방법은 RepositoryRestMvcConfiguration을 확장하고 repositoryExporterHandlerMapping을 재정의하고 부모 메소드를 호출 한 다음 ... .setInterceptors (...)를 호출하는 것입니다.

  2. ==============================

    2.실제 구현 세부 정보를 찾는 사람들을 위해 ..

    실제 구현 세부 정보를 찾는 사람들을 위해 ..

    요격기

    public class CustomInterceptor extends HandlerInterceptorAdapter {
    
        @Override
        public boolean preHandle(HttpServletRequest request,
                HttpServletResponse response, Object handler) throws Exception {
            System.out.println("adding CORS headers.....");
            response.addHeader("HEADER-NAME", "HEADER-VALUE");
            return true;
        }
    
    }
    

    Java 구성

    @Configuration
    public class RepositoryConfig extends
            RepositoryRestMvcConfiguration {
    
        @Override
        public RequestMappingHandlerMapping repositoryExporterHandlerMapping() {
            RequestMappingHandlerMapping mapping = super
                    .repositoryExporterHandlerMapping();
    
            mapping.setInterceptors(new Object[] { new CustomInterceptor() });
            return mapping;
        }
    }
    
  3. ==============================

    3.마지막으로 spring-data-rest 2.4.1.RELEASE에서도 작업하는 커스텀 인터셉터 셋업을 만들었습니다.

    마지막으로 spring-data-rest 2.4.1.RELEASE에서도 작업하는 커스텀 인터셉터 셋업을 만들었습니다.

    @Configuration
    public class RestMvcConfig extends RepositoryRestMvcConfiguration {
    
        @Autowired UserInterceptor userInterceptor;
    
        @Autowired ApplicationContext applicationContext;
    
        @Override
        public DelegatingHandlerMapping restHandlerMapping() {
    
            RepositoryRestHandlerMapping repositoryMapping = new RepositoryRestHandlerMapping(resourceMappings(), config());
            repositoryMapping.setInterceptors(new Object[] { userInterceptor }); // FIXME: not nice way of defining interceptors
            repositoryMapping.setJpaHelper(jpaHelper());
            repositoryMapping.setApplicationContext(applicationContext);
            repositoryMapping.afterPropertiesSet();
    
            BasePathAwareHandlerMapping basePathMapping = new BasePathAwareHandlerMapping(config());
            basePathMapping.setApplicationContext(applicationContext);
            basePathMapping.afterPropertiesSet();
    
            List<HandlerMapping> mappings = new ArrayList<HandlerMapping>();
            mappings.add(basePathMapping);
            mappings.add(repositoryMapping);
    
            return new DelegatingHandlerMapping(mappings);  
        }
    
    }
    

    restHandlerMapping 메서드를 재정의하고, 내용을 복사하여 붙여 넣고, 사용자 인터셉터를 추가 할 수있는 저장소 repositoryMapping.setInterceptors를 추가해야했습니다. 내 경우에는 UserInterceptor입니다.

    더 좋은 방법이 있습니까?

  4. from https://stackoverflow.com/questions/19251846/custom-default-headers-for-rest-api-only-using-spring-data-rest by cc-by-sa and MIT license