[英]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.