복붙노트

[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. ==============================

    1.독자적인 HandlerInterceptor를 구현할 수 있습니다. preHandle 메서드에서 @RequestParameter로 주석 처리 된 모든 HandlerMethod 매개 변수를 가져올 수 있습니다. 요청시 모든 매개 변수가 허용됩니다.

    독자적인 HandlerInterceptor를 구현할 수 있습니다. preHandle 메서드에서 @RequestParameter로 주석 처리 된 모든 HandlerMethod 매개 변수를 가져올 수 있습니다. 요청시 모든 매개 변수가 허용됩니다.

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

    2.요청의 getParameterMap 메소드를 사용하여 제출 된 모든 매개 변수의 맵을 가져오고 허용 된 모든 매개 변수 목록에 대해 키의 유효성을 검증 할 수 있습니다. 요청 객체를 메소드 시그니처에 추가하는 것만으로 요청 객체를 가져올 수 있어야합니다 (예 :

    요청의 getParameterMap 메소드를 사용하여 제출 된 모든 매개 변수의 맵을 가져오고 허용 된 모든 매개 변수 목록에 대해 키의 유효성을 검증 할 수 있습니다. 요청 객체를 메소드 시그니처에 추가하는 것만으로 요청 객체를 가져올 수 있어야합니다 (예 :

    public List<MetricType> getMetricTypes(   
        HttpServletRequest request,
        @RequestParam(value = "subject", required = false) Long subjectId,
        ...
    ) throws Exception {
    
  3. ==============================

    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를 확인하는 방법을 참조하십시오?

  4. 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