You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@geronimo.apache.org by Marco Laponder <ma...@kewill.com> on 2008/09/12 10:41:56 UTC

logging servlet filter

Hi All,

I am trying to create a servlet filter to monitor the requests on my web
application. 

I would like to record the URI and query string and I have accomplished
this without any problems. But when I added code to log the posted data
this results in some problems.

I read the posted data from the input stream of the request and copy
these contents to file. So far so good. But when my web application code
is executing it is missing all the data from the post in the parameter
map returned by the getParameterMap() function on the request, I suspect
because I have read all the data from the input stream of the request.

I tried to solve it by calling the doFilter on the chain with a wrapper
request with a custom getInputStream method where I return my own
servlet inputstream containing the data I had read from the original
inputstream, but the getInpustream is never called on my wrapper.

Can anyone provide me with some insight how to accomplish such a logging
and what I am doing wrong in the structure above ? 

Kind regards,
Marco Laponder






Re: logging servlet filter

Posted by Ivan <xh...@gmail.com>.
I guess the method getInputStream is used for the developers who want to
handle the request block themselves. Maybe the server could call some
low-level methods in the implementation of the HttpServletRequest for
request parsing.
I suggest you could use the network monitor tool to log the request block.
If you really want to do it in the server itself, maybe a third pary request
parser is needed,such as commons-fileupload.
I suppose the steps below could fulfill your requirements:
1. First using your current wrapper request to log the data
2. Pass your wrapper request to the commons-fileupload. maybe use new  *
ServletFileUpload**<http://commons.apache.org/fileupload/apidocs/org/apache/commons/fileupload/servlet/ServletFileUpload.html#ServletFileUpload%28%29>
*() .parse(yourwrapperRequest)
3. For the method parse above returns a list object, you need to write
another wrapper request, and overwrite some method in it (such as
getParameter) to make your application works as usual




2008/9/12 Marco Laponder <ma...@kewill.com>

> Hi All,
>
> I am trying to create a servlet filter to monitor the requests on my web
> application.
>
> I would like to record the URI and query string and I have accomplished
> this without any problems. But when I added code to log the posted data
> this results in some problems.
>
> I read the posted data from the input stream of the request and copy
> these contents to file. So far so good. But when my web application code
> is executing it is missing all the data from the post in the parameter
> map returned by the getParameterMap() function on the request, I suspect
> because I have read all the data from the input stream of the request.
>
> I tried to solve it by calling the doFilter on the chain with a wrapper
> request with a custom getInputStream method where I return my own
> servlet inputstream containing the data I had read from the original
> inputstream, but the getInpustream is never called on my wrapper.
>
> Can anyone provide me with some insight how to accomplish such a logging
> and what I am doing wrong in the structure above ?
>
> Kind regards,
> Marco Laponder
>
>
>
>
>
>


-- 
Ivan