我需要在从Acegi类调用的POJO中获取当前页面URL(需要为我正在处理的应用程序添加一些自定义逻辑)并且需要检索HttpServletRequest以便我可以获取URL的子域(逻辑所基于的)。
我试图添加:
@Autowired
private HttpServletRequest request;
...
public void setRequest(HttpServletRequest request) {
this.request = request;
}
public HttpServletRequest getRequest() {
return request;
}
但是当我尝试在我的代码中使用请求对象时,它是null。
知道我做错了什么或者我怎么能更好地做这件事?
答案 0 :(得分:48)
如果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,那么您需要在web.xml
中注册RequestContextListener或RequestContextFilter。