Yes, this is pretty easy:
Create a provider, for example. GenerelAccessHandler.java:
@Provider
public final class GeneralAccessHandler implements ContainerRequestFilter, ContainerResponseFilter {
@Context
private final HttpServletRequest mHttpServletRequest;
@Context
private final UriInfo mUriInfo;
@Override
public ContainerRequest filter(final ContainerRequest request) {
if (null != mHttpServletRequest) {
System.out.println("Method: " + mHttpServletRequest.getMethod());
System.out.println("Session: " + mHttpServletRequest.getSession().getId());
System.out.println("User Agent: " + mHttpServletRequest.getHeader("user-agent"));
final String addr = mHttpServletRequest.getRemoteAddr();
final int port = mHttpServletRequest.getRemotePort();
System.out.println("Client: " + addr + ":" + port);
}
if (null != mUriInfo) {
System.out.println("URI: " + mUriInfo.getRequestUri().getPath());
}
return request;
}
@Override
public ContainerResponse filter(final ContainerRequest pReq, final ContainerResponse pResp) {
System.out.println("Outgoing Response")
return pResp;
}
}
And in your web.xml you can add two init-params to your Servlet, pointing to this AccessHandler as follows:
<init-param>
<param-name>com.sun.jersey.spi.container.ContainerRequestFilters</param-name>
<param-value>your.fully.qualified.GeneralAccessHandler</param-value>
</init-param>
<init-param>
<param-name>com.sun.jersey.spi.container.ContainerResponseFilters</param-name>
<param-value>your.fully.qualified.GeneralAccessHandler</param-value>
</init-param>
. , . , MDC ..
, !