OncePerRequestFilter调用问题
在Spring自定义过滤器中,调用HttpServletRequest的getReader方法,为了获取post上传的参数,得到参数后继续调用doFilter出现以下错误。
错误信息
Request processing failed; nested exception is java.lang.IllegalStateException: getReader() has already been called for this request
解决
HttpServletRequest的getInputStream()和getReader() 都只能读取一次,由于RequestBody是流的形式读取,那么流读了一次就没有了,所以只能被调用一次。
先将RequestBody保存,然后通过Servlet自带的HttpServletRequestWrapper类覆盖getReader()和getInputStream()方法,
使流从保存的body读取。然后再Filter中将ServletRequest替换为AuthenticationRequestWrapper
|
|
调用
|
|