요청 매개 변수에 대한 변환을 수행하기 위해 서브 클래스 HttpServletRequestWrapper
을 사용하고 있습니다. 요청 된 첫 번째 값은 변환 된 값을 캐시합니다. 예를 들어, 처음으로 getQueryString()
이 호출되면 super.getQueryString()
을 호출하고 원하는 결과를 계산하여 필드에 유지 한 다음 반환합니다. 다음 번에는 캐시 된 결과 만 사용합니다.RequestWrapper 오브젝트에서 요청이 전달되는시기를 알아 보는 방법
"전달"이없는 한이 방법은 매력처럼 작동합니다. 요청이 전달되면 Tomcat이 원래 요청을 바꿔 캐시 된 쿼리 문자열이 변경되지 않고 전달 된 페이지가 전달 된 것이 아닌 원래 쿼리 문자열을 가져옵니다.
캐시를 지우는 데 setRequest()
메서드를 재정의해도 요청이 두 번 래핑 된 것처럼 내 속지에있는 setRequest
(내 것이 아닌)을 호출하며 캐시를 지울 수있는 방법이 없습니다. 일어난다.
"전달"이있을 때 캐시를 지울 수 있도록 래핑 된 요청 계층 구조가 변경되었을 때 알림을받을 수있는 방법을 찾고 있습니다.
요청이 처리되기 바로 전에 요청 데이터를 수정 (캐시 값을 처리하고 저장하는) 필터를 사용하지 않는 이유는 무엇입니까? 이것은 당신이 그런 일을해야한다고 생각하는 것보다 더 스펙이 될 것입니다. – HefferWolf
필터에 요청을 래핑하는 중이지만 사양에서 원래 요청 값을 수정하지 말고 요청을 수정해서는 안된다고합니다. 참조하십시오 : http://stackoverflow.com/questions/1413129/modify-request-parameter-with-servlet-filter – Iravanchi