Is there a way to register every web service call coming to an app in Jersey

I am using Jersey 1.8 in My application. Now there are many classes of service. Is there a way to register the entire request coming to different services. This means that you can create something like a general filter through which the entire request will be sent, from where I can monitor and record all incoming requests.

+4
source share
3 answers

Yes, this is pretty easy:

Create a provider, for example. GenerelAccessHandler.java:

@Provider
public final class GeneralAccessHandler implements ContainerRequestFilter, ContainerResponseFilter {

    /** The incoming request we obtained. */
    @Context
    private final HttpServletRequest mHttpServletRequest;

    /** Some useful informations about the accesspoint in our service. */
    @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 ..

, !

+3

com.sun.jersey.spi.container.ContainerRequestFilter init-param -.

JerseySpringServlet :

<servlet>
    <servlet-name>Jersey Spring Servlet</servlet-name>
    <servlet-class>com.sun.jersey.spi.spring.container.servlet.SpringServlet</servlet-class>
    <init-param>
        <param-name>com.sun.jersey.spi.container.ContainerRequestFilters</param-name>
        <param-value>com.domain.my.implements.containerrequestfilter.MyFilter</param-value>
    </init-param>
</servlet>
0

If you are using Jersey 2+

@Provider
public final class GeneralAccessHandler implements ContainerRequestFilter, ContainerResponseFilter {

    @Context
    private HttpServletRequest servReq;

    @Override
    public void filter(ContainerRequestContext requestContext, ContainerResponseContext responseContext) throws IOException {
        System.out.println("Method: " + requestContext.getMethod());
        System.out.println("Path: " + requestContext.getUriInfo().getPath());
        System.out.println("User Agent: " + requestContext.getHeaderString("user-agent"));
        final String addr = servReq.getRemoteAddr();
        final int port = servReq.getRemotePort();
        System.out.println("Client: " + addr + ":" + port);
        System.out.println("URI: " + requestContext.getUriInfo().getRequestUri());
    }

    @Override
    public void filter(ContainerRequestContext requestContext) throws IOException {
        //When there is no response
    }
}

Register the servlet as indicated in the accepted answer:

<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>
0
source

Source: https://habr.com/ru/post/1533359/


All Articles