¿Cómo obtengo una HttpServletRequest en mis beans de primavera?

votos
28

Estoy desarrollando una aplicación con un front-end basado en Flex y un back-end Spring / Hibernate.

Para que la integración de Facebook funcione de la manera en que lo tengo actualmente, necesito leer las cookies establecidas en javascript en el front-end del back-end y hacer una validación durante el inicio de sesión para ver si el usuario está intentando falsificar su Facebook iniciar sesión.

Esto sería bastante fácil, pero no puedo entender cómo obtener la HttpServletRequest. Estoy usando una configuración bastante básica de Spring (esta es mi primera aplicación real de Spring, y estoy bastante familiarizada con ella ahora, pero hay muchas que nunca he visto).

No estoy usando Spring MVC o Spring WebFlow ni nada de eso. Puedo obtener el ServletContext, pero aún no he descubierto cómo obtener la solicitud.

¿Alguna ayuda?

Publicado el 18/02/2009 a las 00:13
fuente por usuario
En otros idiomas...                            


5 respuestas

votos
11

Esta es una especie de Flex / BlazeDS específico, pero esta es la solución que se me ocurrió. Lo siento si responder mi propia pregunta es un paso en falso.

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

Funciona, obtengo las cookies. Mi problema estaba en Spring - BlazeDS lo tenía. La primavera probablemente también, pero todavía no sé cómo llegar a ella.

Respondida el 18/02/2009 a las 00:40
fuente por usuario

votos
75

Si FlexContext no está disponible:

Solución 1: método interno (> = se requiere Spring 2.0)

HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder

        .getRequestAttributes()).getRequest();

Solución 2: dentro de frijol (¡probablemente se requiera Spring 3.0 para frijoles singelton!)

@Autowired

private HttpServletRequest request;
Respondida el 25/11/2009 a las 11:13
fuente por usuario

votos
1

La @Contextanotación (ver respuestas en esta pregunta: ¿Qué hace la anotación de contexto en la primavera? ) Hará que se puede inyectar para usted.

Tuve que usar

@Context
private HttpServletRequest request;
Respondida el 07/02/2016 a las 09:36
fuente por usuario

votos
2

@ Respuesta de eeezyy no funcionó para mí, aunque yo estoy usando la primavera de arranque (2.0.4) y que puede ser diferente, pero aquí una variación en el año 2018 funciona así:

@Autowired
private HttpServletRequest request;
Respondida el 07/11/2018 a las 16:01
fuente por usuario

votos
0

esto debe hacerlo

((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getRequest().getRequestURI();
Respondida el 17/06/2019 a las 22:21
fuente por usuario

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more