2013-01-31 107 views
0

我使用spring-acegi,並且我想從DAO層讀取IP地址。當我使用類似:從DAO層檢索IP地址

Authentication auth = SecurityContextHolder.getContext().getAuthentication(); 
if (auth != null) { 
    WebAuthenticationDetails details1 = ((WebAuthenticationDetails)auth.getDetails()); 
    if (details1 != null) { 
     userIp = details1.getRemoteAddress(); 
    } 
} 

身份驗證身份驗證的時刻爲空,我不能retreive IP地址。

我也試圖通過

String remoteAddress = ((ServletRequestAttributes)RequestContextHolder.currentRequestAttributes()) 
     .getRequest().getRemoteAddr(); 

來獲得IP地址,卻得到了一個編譯錯誤(我們使用GWT)。

任何人都可以幫助我嗎?謝謝。

+0

你想做什麼? DAO層是什麼意思?這是在認證過程中嗎? –

+1

爲什麼不創建一個更多的過濾器(礦石使用現有),並從HttpRequest中獲取IP並將其存儲在靜態ThreadLocal變量中以便在您的DAO中使用? – user1516873

+0

拋出的異常是什麼? – erencan

回答

0

移動你的

String remoteAddress = ((ServletRequestAttributes)RequestContextHolder.currentRequestAttributes()).getRequest().getRemoteAddr(); 

代碼爲若干類客戶共享包。看看你的app * .gwt.xml描述符。例如,如果你有COM /域/ App.gwt.xml作爲GWT描述符和源包被聲明爲

<source path="client" /> 
<source path="shared" /> 

,那麼你必須編寫代碼com.domain.client外COM .domain.shared包。

考慮一些代碼的重構。如果DAO層絕對需要了解IP,那麼最好將它作爲參數發送給某個方法調用。