如何在我的spring bean中获得HttpServletRequest?

时间:2009-02-17 23:13:34

标签: java flex spring facebook

我正在开发一个带有基于Flex的前端和Spring / Hibernate后端的应用程序。

为了让Facebook集成按照我目前的方式工作,我需要在后端的前端读取javascript中设置的cookie,并在登录期间进行一些验证,看看用户是否正在尝试欺骗他的Facebook登录。

这很简单,但我无法弄清楚如何获取HttpServletRequest。我正在使用一个非常基本的Spring配置(这是我的第一个真正的Spring应用程序,现在我对它非常熟悉,但是我从来没有看过很多东西。)

我没有使用Spring MVC或Spring WebFlow或类似的东西。我可以获得ServletContext,但我还没弄明白如何获取请求。

任何帮助?

6 个答案:

答案 0 :(得分:95)

如果FlexContext不可用:

解决方案1:内部方法(> =需要Spring 2.0)

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

解决方案2:内部bean(由> = 2.5支持,Spring 3.0需要singelton bean!)

@Autowired
private HttpServletRequest request;

答案 1 :(得分:11)

这是一种特定的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()));
    }

它有效,我得到了饼干。我的问题是寻找Spring - BlazeDS有它。 Spring也可能会这样做,但我仍然不知道如何实现它。

答案 2 :(得分:2)

@eeezyy的答案对我不起作用,尽管我使用的是Spring Boot(2.0.4),并且可能有所不同,但2018年的一种变化因此起作用:

@Autowired
private HttpServletRequest request;

答案 3 :(得分:1)

@Context注释(请参阅此问题中的答案:What does context annotation do in Spring?)会导致它被注入。

我必须使用

@Context
private HttpServletRequest request;

答案 4 :(得分:1)

更好的方法是使用构造函数自动连线:

private final HttpServletRequest httpServletRequest;

public ClassConstructor(HttpServletRequest httpServletRequest){
      this.httpServletRequest = httpServletRequest;
}

答案 5 :(得分:0)

这应该做

((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getRequest().getRequestURI();