Вы можете получить его от RequestContextHolder
, если он существует:
GrailsWebRequest request = RequestContextHolder.currentRequestAttributes()
request.getHeader("X-Forwarded-For")
Как правило, как вы, наверное, знаете, не очень хорошая идея для доступа к веб-сеансу из Сервисов. Прежде всего, вы нарушаете абстракцию и разделение служебной логики, и запросы могут не всегда быть доступными или связанными с текущим потоком. Одним из способов доступа к сеансу из службы является инкапсуляция сеанса 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()
.
Отказ от ответственности: код взят из блога Марка-Оливера Шееле .