[SPRING] Spring Data REST를 사용하는 REST API 전용 사용자 정의 기본 헤더
SPRINGSpring Data REST를 사용하는 REST API 전용 사용자 정의 기본 헤더
내 응용 프로그램이 REST API 및 웹 응용 프로그램을 호스팅하는 유스 케이스가 있고 우리는 REST API에만 사용자 정의 헤더를 추가해야합니다. REST API는 Spring Data REST를 통해 사용할 수있다. 일반적으로 Servlet Filter를 사용하여이를 구현할 수 있지만 요청을 REST API에 격리하고 사용자 정의 헤더를 추가하는 로직을 코딩해야합니다. Spring Data REST API가 생성하는 모든 응답에 기본 헤더를 추가 할 수 있다면 좋을 것입니다. 당신의 생각은 무엇입니까? 내가 게으른다고 말하지 마 :)
해결법
-
==============================
1.Spring Data REST는 Spring MVC 위에 구축되기 때문에 가장 쉬운 방법은 참조 문서에 설명 된대로 사용자 정의 HandlerInterceptor를 구성하는 것이다.
Spring Data REST는 Spring MVC 위에 구축되기 때문에 가장 쉬운 방법은 참조 문서에 설명 된대로 사용자 정의 HandlerInterceptor를 구성하는 것이다.
Spring Data REST를 사용하면 가장 쉬운 방법은 RepositoryRestMvcConfiguration을 확장하고 repositoryExporterHandlerMapping을 재정의하고 부모 메소드를 호출 한 다음 ... .setInterceptors (...)를 호출하는 것입니다.
-
==============================
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.마지막으로 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입니다.
더 좋은 방법이 있습니까?
from https://stackoverflow.com/questions/19251846/custom-default-headers-for-rest-api-only-using-spring-data-rest by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] IntelliJ는 tomcat / conf 디렉토리를 프로젝트 디렉토리에 복사해야합니다. (0) | 2019.01.17 |
---|---|
[SPRING] URL 매개 변수 / URL로 전달 된 로그인 매개 변수를 확인하지 못하게하려면 어떻게해야합니까? (0) | 2019.01.17 |
[SPRING] 봄 - 한 URL을 다른 URL로 다시 작성하십시오. (0) | 2019.01.17 |
[SPRING] Spring의 MessageInterpolator (0) | 2019.01.16 |
[SPRING] 스프링이있는 JSR-303 제약 검사기의 종속성 삽입 실패 (0) | 2019.01.16 |