簡體   English   中英

如何在我的 spring bean 中獲取 HttpServletRequest?

[英]How do I get a HttpServletRequest in my spring beans?

我正在開發一個具有基於 Flex 的前端和 Spring/Hibernate 后端的應用程序。

為了讓 Facebook 集成以我目前的方式工作,我需要讀取后端前端在 javascript 中設置的 cookie,並在登錄期間進行一些驗證,以查看用戶是否試圖欺騙他的 Facebook登錄。

這很容易,但我不知道如何獲取 HttpServletRequest。 我正在使用一個非常基本的 Spring 配置(這是我的第一個真正的 Spring 應用程序,我現在非常熟悉它,但有很多我從未看過。)

我沒有使用 Spring MVC 或 Spring WebFlow 或類似的東西。 我可以獲取到ServletContext,但是我還沒有弄清楚如何獲取請求。

有什么幫助嗎?

如果 FlexContext 不可用:

解決方案 1:內部方法(>= 需要 Spring 2.0)

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

解決方案 2:inside bean(支持 >= 2.5,需要 singelton beans 的 Spring 3.0!)

@Autowired
private HttpServletRequest request;

這是一種特定於 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 可能也是如此,但我仍然不知道如何去做。

@eezyy 的回答對我不起作用,盡管我使用的是 Spring Boot (2.0.4),它可能有所不同,但 2018 年的一個變體是這樣工作的:

@Autowired
private HttpServletRequest request;

這應該做到

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

@Context注釋(請參閱此問題的答案: What does context annotation do in Spring? )將導致它為您注入。

我不得不使用

@Context
private HttpServletRequest request;

更好的方法是使用構造函數自動裝配:

private final HttpServletRequest httpServletRequest;

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM