之前做后台管理系统的操作日志记录很简单,就是用spring mvc的interceptor做拦截器,对配置的URL进行判断拦截,最后记录到数据库或者日志
但是最近做APP的接口请求拦截,发现不那么简单
1 接口使用application/json请求,那么获取参数的时候,就不能用httpServletRequest.getParameterMap(),需要使用httpServletRequest.getInputStream()
2 如果在interceptor里面用httpServletRequest.getInputStream()会产生新的问题,request的流只能读取一次,如果是在preHandle里面读取stream请求的内容,会导致controller获取不到数据了,如果在afterHandle里面读取stream,或读取为空,因为controller已经读取过了
3 百思不得姐,search了一下,还是用Filter来实现,servlet提供了一个wrapper模式的类:HttpServletRequestWrapper,通过他,可以获取到包装后的httpServletRequest
4 具体实现,我上传到oschina的代码里面:
HttpServletRequestReplacedFilter BodyReaderHttpServletRequestWrapper
转载请注明原文地址: https://ju.6miu.com/read-370.html