问题描述
|
我需要在正在从Acegi类调用的POJO中获取当前页面的URL(需要为我正在处理的应用添加一些自定义逻辑),并且需要检索HttpServletRequest,以便可以获取的子域。 URL(逻辑基础)。
我尝试添加:
@Autowired
private HttpServletRequest request;
...
public void setRequest(HttpServletRequest request) {
this.request = request;
}
public HttpServletRequest getRequest() {
return request;
}
但是,当我尝试在代码中使用请求对象时,该对象为null。
知道我做错了什么或如何更好地做到这一点吗?
解决方法
如果bean是请求范围的,则可以像执行操作一样自动装配HttpServletRequest。
@Component
@Scope(\"request\")
public class Foo {
@Autowired private HttpServletRequest request;
//
}
否则,您可以按以下方式获取当前请求:
ServletRequestAttributes sra = (ServletRequestAttributes)RequestContextHolder.getRequestAttributes();
HttpServletRequest req = sra.getRequest();
这在后台使用了线程局部的。
如果您使用的是Spring MVC,那么这就是您所需要的。如果您不使用Spring MVC,则需要在ѭ3中注册一个RequestContextListener或RequestContextFilter。