2010-09-13 111 views
2

我已經實現攔截器來執行與以下注釋的客戶機IP地址的安全檢查 - @Provider @ServerInterceptor @Precedence(「SECURITY」)Resteasy安全攔截器 - 如何獲取攔截器內的客戶端IP地址?

的預處理方法需要的參數的HttpRequest請求, ResourceMethod方法。 有沒有從Resteasy HttpRequest對象獲取客戶端IP地址的方法? 我可以實現一個過濾器來解決這個問題,但想要在一個地方進行安全檢查。

回答

1

客戶端IP地址是可用的從請求對象。但是您不能將其用於安全目的,因爲它不是每個客戶端唯一的:它可能只是最近代理的地址,甚至是您自己的地址。

+0

這是我們現在需要忍受的事情。你能告訴我如何從org.jboss.resteasy.spi.HttpRequest獲取IP地址嗎? – 2010-09-13 11:18:29

+0

這是真的,一般用於Java Servlets和其他系統。它們的HTTP頭客戶端(遠程)地址(IP)的參考點只是最近的一跳 - 而不是源。最好在前端路由器中執行此操作,並控制可以在Java端(可靠地)解析的自定義標頭。 – 2013-03-30 22:29:05

0

這(我的)答案是錯誤的! HttpServletRequest的是「注入」只有當過濾器類實例化,所以例如「看」同一HttpServletRequest的所有後續請求(HttpServletRequest的永遠是第一位!!!!!)


你可以注入HttpServletRequest對象來訪問客戶端ip(我正在使用它)

@Provider 
@Interceptor 
@Precedence("SECURITY") 
public class JAXRSInterceptor implements PreProcessInterceptor 
{ 

    **@Context HttpServletRequest request; // WRONG WRONG WRONG** 

    @Override 
    public ServerResponse preProcess(HttpRequest arg0, ResourceMethod arg1) throws Failure, WebApplicationException 
    { 


     System.out.println(request.getRemoteAddr()); 
     System.out.println(request.getRemoteHost()); 
    }