Как получить HttpServletRequest в моем spring beans?
Я разрабатываю приложение с интерфейсом на основе Flex и Spring/Hibernate.
Чтобы интеграция Facebook работала так, как у меня есть в настоящее время, мне нужно прочитать файлы cookie, установленные в javascript на передней панели в фоновом режиме, и выполнить некоторую проверку во время входа в систему, чтобы узнать, пытается ли пользователь подделать его в Facebook.
Это было бы довольно легко, но я не могу понять, как получить HttpServletRequest. Я использую довольно простой Spring config (это мое первое реальное приложение Spring, и теперь я хорошо знаком с ним, но там много чего я никогда не просматривал.)
Я не использую Spring MVC или Spring WebFlow или что-то в этом роде. Я могу получить ServletContext, но я еще не понял, как получить запрос.
Любая помощь?
Ответы
Ответ 1
Если FlexContext недоступен:
Решение 1: метод inside (> = требуется Spring 2.0)
HttpServletRequest request =
((ServletRequestAttributes)RequestContextHolder.getRequestAttributes())
.getRequest();
Решение 2: внутри bean-компонента (поддерживается> = 2.5, требуется Spring 3.0 для bean-компонентов singelton!)
@Autowired
private HttpServletRequest request;
Ответ 2
Это своего рода Flex/BlazeDS, но вот решение, которое я придумал. Извините, если ответить на мой собственный вопрос - это faux pas.
HttpServletRequest request = flex.messaging.FlexContext.getHttpRequest();
Cookie[] cookies = request.getCookies();
for (Cookie c:cookies)
{
log.debug(String.format("Cookie: %s, %s, domain: %s",c.getName(), c.getValue(),c.getDomain()));
}
Он работает, я получаю файлы cookie. Моя проблема смотрела на Spring - у BlazeDS это было. Spring, вероятно, тоже, но я до сих пор не знаю, как добраться до него.
Ответ 3
Ответ @eeezyy у меня не сработал, хотя я использую Spring Boot (2.0.4), и он может отличаться, но вариант в 2018 году работает следующим образом:
@Autowired
private HttpServletRequest request;
Ответ 4
Аннотация @Context
(см. ответы в этом вопросе: Что делает аннотация для контекста в Spring?), приведет к его вводу для вас.
Мне пришлось использовать
@Context
private HttpServletRequest request;
Ответ 5
это должно сделать это
((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getRequest().getRequestURI();