您可以从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