How to inject HttpServletRequest in JAX-RS resource in order to get client IP

56 Views Asked by At

Java 21 and RMI. Tomcat 10.1.

I want to get the client IP that is consuming my JAX-RS resource.

Here is my code:

Path("/")
public class RequestHandlerWebSession
        extends AMWebServiceHandler
{
    private final CWebSessionController controller;

    /**
     * @throws Exception
     */
    public RequestHandlerWebSession() throws Exception
    {
        super("RequestHandlerWebSession");
        this.controller = CWebSessionController.getInstance();
    }

    
    @GET
    @Path("/systime")
    @Produces({MediaType.APPLICATION_JSON})
    public Response systime()
    {
        String methode = "systime()";

        try
        {       
                       // do something

            return Response.ok(jsonString, MediaType.APPLICATION_JSON)
                           .build();
        }
        catch (Exception ex)
        {
            return createErrorResponse(ex, methode, new SystimeResponse());
        }
    }

I tried this:

Path("/")
public class RequestHandlerWebSession
        extends AMWebServiceHandler
{
    private final CWebSessionController controller;

** @Context
    private HttpServletRequest httpRequest;**

    
    @GET
    @Path("/systime")
    @Produces({MediaType.APPLICATION_JSON})
    public Response systime()
    {
        String methode = "systime()";

        try
        {

    ** String ipAddress = httpRequest.getRemoteAddr();**

            return Response.ok(jsonString, MediaType.APPLICATION_JSON)
                           .build();
        }
        catch (Exception ex)
        {
            return createErrorResponse(ex, methode, new SystimeResponse());
        }
    }

But I'm getting 500 Error:

jakarta.servlet.ServletException: jakarta.enterprise.inject.InjectionException: Exception occurred during Jersey/JAX-RS annotations processing in the class: class de.maris.mweb.handler.RequestHandlerWebSession
    org.glassfish.jersey.servlet.WebComponent.serviceImpl(WebComponent.java:409)
    org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:346)
    org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:357)
    org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:311)
    org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:205)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
    org.apache.catalina.filters.CorsFilter.handleNonCORS(CorsFilter.java:331)
    org.apache.catalina.filters.CorsFilter.doFilter(CorsFilter.java:158)
Root Cause

jakarta.enterprise.inject.InjectionException: Exception occurred during Jersey/JAX-RS annotations processing in the class: class de.maris.mweb.handler.RequestHandlerWebSession

I also tried @Inject instead of @Context, but that gives me CORS Violation Error. I didnt have any CORS error before adding the HttpServletRequest.

Any idea how to solve this?

0

There are 0 best solutions below