一尘不染

Spring:如何将HttpServletRequest注入到请求范围的bean中?

java

我正在尝试在Spring中建立一个请求范围的bean。

我已经成功设置好了,所以每个请求创建一次bean。现在,它需要访问HttpServletRequest对象。

由于该bean是每个请求创建一次的,所以我认为容器可以轻松地将请求对象注入到我的bean中。我怎样才能做到这一点 ?


阅读 490

收藏
2020-03-21

共2个答案

一尘不染

可以将请求范围的Bean与请求对象自动连接。

private @Autowired HttpServletRequest request;
2020-03-21
一尘不染

Spring 通过type 的包装器对象公开当前HttpServletRequest对象(以及当前HttpSession对象)。此包装对象绑定到ThreadLocal,可以通过调用方法获得。ServletRequestAttributesstaticRequestContextHolder.currentRequestAttributes()

ServletRequestAttributes提供getRequest()获取当前请求,getSession()获取当前会话的方法以及获取存储在两个范围中的属性的其他方法。以下代码虽然有点难看,但应该可以在应用程序中的任何位置为你提供当前的请求对象:

HttpServletRequest curRequest = 
((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes())
.getRequest();

请注意,该RequestContextHolder.currentRequestAttributes()方法返回一个接口,并且需要进行类型转换以ServletRequestAttributes实现该接口。

2020-03-21