您可以從RequestContextHolder
得到它,如果它存在:
GrailsWebRequest request = RequestContextHolder.currentRequestAttributes()
request.getHeader("X-Forwarded-For")
一般情況下,你可能知道,它不被認爲是一個非常好的主意,從內部服務訪問Web會話。首先,您打破了服務邏輯的抽象和分離,並且請求可能並不總是可用或與當前線程關聯。從服務訪問會話的方法之一是封裝以下列方式HTTP會話:
class WebUtilService {
void withSession (Closure closure) {
try {
GrailsWebRequest request = RequestContextHolder.currentRequestAttributes()
GrailsHttpSession session = request.session
closure.call(session)
}
catch (IllegalStateException ise) {
log.warn ("No WebRequest available!")
}
}
}
,你會使用這樣的:
class MyService {
WebUtilService webUtilService
void doSomething() {
webUtilService.withSession { HttpSession session ->
log.info(session.myValue)
session.newValue = 'Possible, but should be exceptional'
}
}
}
在那裏你可以有機會獲得getHeader()
方法。
聲明:代碼來自Marc-Oliver Scheele的blog。
GrailsWebRequest request = RequestContextHolder.currentRequestAttributes()的作品!非常感謝 – dimcookies 2012-03-26 19:54:13