2016-09-06 1 views
1

При инъекции объекта HttpServletRequest в Джерси 2.0 я получаю это исключение ->java.lang.IllegalStateException: Not inside a request scope.Как я могу назвать один джерси-сервис с другой службы в java? Также как я могу вставить объект HttpServletRequest внутри моего AuthenticationFilter

Я попытался вставить объект HttpServletRequest в AuthenticationFIlter для получения IP-адреса клиента, но он не прошел с превышением исключения, но тот же код отлично работал в jersey 2.2.3 api.

import javax.annotation.Priority; 
import javax.servlet.http.HttpServletRequest; 
import javax.ws.rs.Priorities; 
import javax.ws.rs.WebApplicationException; 
import javax.ws.rs.container.ContainerRequestContext; 
import javax.ws.rs.container.ContainerRequestFilter; 
import javax.ws.rs.core.Context; 
import javax.ws.rs.core.Response; 
import javax.ws.rs.core.Response.Status; 
import javax.ws.rs.ext.Provider; 

@Provider 
@Priority(Priorities.AUTHENTICATION) 
public class AuthFilter implements ContainerRequestFilter { 

    @Context 
    HttpServletRequest request; 

    public String getClientIP(@Context HttpServletRequest request) { 
     return request.getRemoteAddr(); 
    } 

    @Override 
    public void filter(ContainerRequestContext requestContext) throws IOException { 

     System.out.println("Filter called."); 
     clientIP = new AuthFilter().getClientIP(request); 
    } 
} 
+1

Что вы пробовали? [Как спросить] (http://stackoverflow.com/help/how-to-ask) – AgataB

+0

Спасибо за ответ. Попробовал вставить объект HttpServletRequest в AuthenticationFIlter для получения IP-адреса клиента, но он не прошел с превышением исключения. Но тот же код работал в джерси 2.2.3 api отлично. – Naresh

+0

Это не Джерси 2.x ('org.glassfish.jersey'). Это Джерси 1.x ('com.sun.jersey.spi'). Вы уверены, что хотите использовать Jersey 1.x? –

ответ

1

Ваш вопрос немного запутанный. Вы упомянули, что используете Jersey 2.x, но на самом деле вы используете Jersey 1.x API.

Джерси 1.x и Джерси 2.x используют различные имена пакетов:

  • Джерси 1.x: com.sun.jersey
  • Джерси 2.x: org.glassfish.jersey

В Джерси 2.x, вы бы получили следующее:

import java.io.IOException; 

import javax.annotation.Priority; 
import javax.servlet.http.HttpServletRequest; 
import javax.ws.rs.Priorities; 
import javax.ws.rs.container.ContainerRequestContext; 
import javax.ws.rs.container.ContainerRequestFilter; 
import javax.ws.rs.core.Context; 
import javax.ws.rs.ext.Provider; 

@Provider 
@Priority(Priorities.AUTHENTICATION) 
public class AuthenticationFilter implements ContainerRequestFilter { 

    @Context 
    private HttpServletRequest request; 

    @Override 
    public void filter(ContainerRequestContext requestContext) throws IOException { 
     String remoteAddress = request.getRemoteAddr(); 
     ... 
    } 
} 

Интерфейс ContainerRequestFilter находится в javax.ws.rs.container пакет, который является частью JAX-RS 2.0 API. И Джерси 2.x - эталонная реализация спецификации JAX-RS 2.0.

+0

Спасибо за помощь. Но все-таки с jersey 2.0 его бросает мне следующее исключение SEVERE: исключение нагрузки на сервлета/теста (0) java.lang.IllegalStateException: не внутри области запроса. \t в com.google.common.base.Preconditions.checkState (Preconditions.java:149) \t в org.glassfish.jersey.process.internal.RequestScope.current (RequestScope.java – Naresh

+0

Даже кот не запускается после введения @ Запрос контекста HttpServletRequest – Naresh

Смежные вопросы