[SPRING] 봄 MVC - 예기치 않은 쿼리 문자열 매개 변수가 전달 된 확인하는 방법?
SPRING봄 MVC - 예기치 않은 쿼리 문자열 매개 변수가 전달 된 확인하는 방법?
스프링 MVC로 작성된 웹 서비스가 있습니다. 타사 개발자가 사용할 수 있습니다. 우리의 메서드는 많은 선택적 매개 변수 (쿼리 문자열에 전달됨)가 있습니다.
모든 쿼리 문자열 매개 변수의 철자가 정확하고 오타가 없는지 확인하고 싶습니다. 그것을 할 수있는 쉬운 방법이 있습니까? 메소드 서명 예제 :
@RequestMapping(value = {"/filter"}, method = RequestMethod.GET)
@ResponseBody
public List<MetricType> getMetricTypes(
@RequestParam(value = "subject", required = false) Long subjectId,
@RequestParam(value = "area", required = false) Long areaId,
@RequestParam(value = "onlyImmediateChildren", required = false) Boolean onlyImmediateChildren,
@RequestParam(value = "componentGroup", required = false) Long componentGroupId
) throws Exception
{
//Some code
}
누군가가 "onlyImmediateChildren = true"대신 "onlyImediateChildren = true"매개 변수 (오타)를 사용하여이 메서드를 호출하면 Spring MVC는 입력 매개 변수를 무시하고 "onlyImmediateChildren"이 null이라고 가정합니다. 개발자는 약간 잘못된 결과 목록을 가져 오며 오류를 알 수 없습니다. 이러한 문제는 널리 퍼지고 진단하기 어려울 수 있습니다. 이러한 문제를 방지하기 위해 쿼리 문자열에 typoed params가 없는지 확인하고 싶습니다.
최신 정보
쿼리 문자열에서 실제 매개 변수 목록을 추출 할 수 있습니다. 그런 다음 허용 된 매개 변수 목록과 비교할 수 있습니다. 허용 된 매개 변수 목록을 하드 코드하면 메소드 서명이 복제됩니다. 메서드 서명에서 허용되는 매개 변수 목록 (예 : @RequestParam annotation)을 쉽게 추출 할 수 있을지 궁금합니다.
많은 감사
최고
해결법
-
==============================
1.독자적인 HandlerInterceptor를 구현할 수 있습니다. preHandle 메서드에서 @RequestParameter로 주석 처리 된 모든 HandlerMethod 매개 변수를 가져올 수 있습니다. 요청시 모든 매개 변수가 허용됩니다.
독자적인 HandlerInterceptor를 구현할 수 있습니다. preHandle 메서드에서 @RequestParameter로 주석 처리 된 모든 HandlerMethod 매개 변수를 가져올 수 있습니다. 요청시 모든 매개 변수가 허용됩니다.
-
==============================
2.요청의 getParameterMap 메소드를 사용하여 제출 된 모든 매개 변수의 맵을 가져오고 허용 된 모든 매개 변수 목록에 대해 키의 유효성을 검증 할 수 있습니다. 요청 객체를 메소드 시그니처에 추가하는 것만으로 요청 객체를 가져올 수 있어야합니다 (예 :
요청의 getParameterMap 메소드를 사용하여 제출 된 모든 매개 변수의 맵을 가져오고 허용 된 모든 매개 변수 목록에 대해 키의 유효성을 검증 할 수 있습니다. 요청 객체를 메소드 시그니처에 추가하는 것만으로 요청 객체를 가져올 수 있어야합니다 (예 :
public List<MetricType> getMetricTypes( HttpServletRequest request, @RequestParam(value = "subject", required = false) Long subjectId, ... ) throws Exception {
-
==============================
3.Spring은 url 문자열에있는 모든 쿼리 매개 변수를 type 인수를 통해 주입합니다.
Spring은 url 문자열에있는 모든 쿼리 매개 변수를 type 인수를 통해 주입합니다.
@RequestParam Map
(있는 경우 컨트롤러 메서드에 있음). @RequestMapping(value = "", method = RequestMethod.GET, produces = {"application/json"}) public HttpEntity<PagedResources<WebProductResource>> findAll(@RequestParam Map<String, String> allRequestParams){ ...
}
그런 다음지도의 키를 직접 확인할 수 있습니다. 그 유 전적으로 "엔터프라이즈"방식으로, 내 대답은 여기에 : 알 수없는 쿼리 매개 변수에 대한 봄 RestController를 확인하는 방법을 참조하십시오?
from https://stackoverflow.com/questions/10010176/spring-mvc-how-to-check-that-no-unexpected-query-string-parameters-has-been-pa by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] Javax 유효성 검사 @NotNull 주석 사용법 (0) | 2019.05.07 |
---|---|
[SPRING] Spring @Autowired는 Jpa 저장소를 연결할 수 없습니다. (0) | 2019.05.07 |
[SPRING] Java 파일 : 내용이 프롤로그에서 허용되지 않습니다. (0) | 2019.05.07 |
[SPRING] 이름이 'entityManagerFactory'인 bean을 생성하는 중 오류가 발생했습니다. init 메소드를 호출하지 못했습니다. (0) | 2019.05.07 |
[SPRING] Projection을 사용한 Spring JPA 네이티브 쿼리는 "ConverterNotFoundException" (0) | 2019.05.07 |