Noa*_*evo 10 java spring-mvc httprequest
我正在尝试为我的Web应用程序创建请求日志.我使用Spring 3. 0.
我实现了一个扩展类,HandlerInterceptorAdapter并使用它preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)来拦截请求.
在方法中,我希望能够记录请求体(我的参数是XML中直接写入请求体的对象),并且我使用 request.getReader();
问题是 - 稍后我会IllegalStateException在弹簧控制器尝试读取请求时得到一个.
有办法做我想做的事吗?
您可以使用过滤器执行此操作.请求参数易于处理.但是,处理请求体将会更加困难,并且需要包装servlet请求,请参阅:HttpServletRequest.
您需要查看传入请求的大小,并决定是否要将请求主体存储为tmp文件或字符串.
您需要使用您的文件或用于记录的已保存字符串覆盖ServetRequest.getInputStream().
如果请求体很大,我建议将输入流放入缓冲的输入流,然后读取正文的开头.
public class LogRequest extends HttpServletRequestWrapper {
public LogRequest(HttpServletRequest request) {
super(request);
}
@Override
public ServletInputStream getInputStream() throws IOException {
//read from tmp file or string.
}
@Override
public BufferedReader getReader() throws IOException {
//read from tmp file or string
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
19209 次 |
| 最近记录: |