Как я могу получить HttpServletRequest в моих весенних бобах? - PullRequest
31 голосов
/ 18 февраля 2009

Я занимаюсь разработкой приложения с интерфейсом на основе Flex и интерфейсом Spring / Hibernate.

Для того, чтобы интеграция с Facebook работала так, как я это делаю в настоящее время, мне нужно прочитать файлы cookie, установленные в javascript на внешнем интерфейсе, и выполнить некоторую проверку во время входа в систему, чтобы увидеть, пытается ли пользователь подделать свой логин на Facebook.

Это было бы довольно легко, но я не могу понять, как получить HttpServletRequest. Я использую довольно простую конфигурацию Spring (это мое первое настоящее приложение Spring, и я довольно хорошо знаю его сейчас, но есть много вещей, на которые я никогда не смотрел.)

Я не использую Spring MVC или Spring WebFlow или что-то подобное. Я могу получить ServletContext, но я еще не выяснил, как получить запрос.

Любая помощь?

Ответы [ 4 ]

95 голосов
/ 25 ноября 2009

Если FlexContext недоступен:

Решение 1: внутренний метод (> = требуется Spring 2.0)

HttpServletRequest request = 
        ((ServletRequestAttributes)RequestContextHolder.getRequestAttributes())
                .getRequest();

Решение 2: внутренний компонент (поддерживается> = 2.5, требуется Spring 3.0 для bean-компонентов singelton!)

@Autowired
private HttpServletRequest request;
11 голосов
/ 18 февраля 2009

Это тип Flex / BlazeDS, но вот решение, которое я придумал. Извините, если ответ на мой вопрос - выдумка.

    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()));
    }

Это работает, я получаю печенье. Моя проблема заключалась в поиске весны - BlazeDS было это. Скорее всего, весна тоже, но я до сих пор не знаю, как туда добраться.

2 голосов
/ 07 ноября 2018

@ Ответ eeezyy у меня не сработал, хотя я использую Spring Boot (2.0.4) и он может отличаться, но вариант здесь в 2018 году работает так:

@Autowired
private HttpServletRequest request;
1 голос
/ 07 февраля 2016

Аннотация @Context (см. Ответы на этот вопрос: Что делает контекстная аннотация в Spring? ) приведет к ее внедрению для вас.

Я должен был использовать

@Context
private HttpServletRequest request;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...