获取POJO类中的Servlet Request对象

NRa*_*Raf 27 spring java-ee

我需要在从Acegi类调用的POJO中获取当前页面URL(需要为我正在处理的应用程序添加一些自定义逻辑)并且需要检索HttpServletRequest以便我可以获取子域的URL(逻辑所基于的URL).

我试过添加:

@Autowired
private HttpServletRequest request;

...

public void setRequest(HttpServletRequest request) {
    this.request = request;
}

public HttpServletRequest getRequest() {
    return request;
}
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试在我的代码中使用请求对象时,它为null.

知道我做错了什么或者我怎么能更好地做到这一点?

sou*_*ica 49

如果bean是请求作用域,你可以像你正在做的那样自动装配HttpServletRequest.

@Component
@Scope("request")
public class Foo {
    @Autowired private HttpServletRequest request;

    //
}
Run Code Online (Sandbox Code Playgroud)

否则,您可以按如下方式获取当前请求:

    ServletRequestAttributes sra = (ServletRequestAttributes)RequestContextHolder.getRequestAttributes();
    HttpServletRequest req = sra.getRequest();     
Run Code Online (Sandbox Code Playgroud)

这使用了本地的线程本地.

如果您正在使用Spring MVC,那就是您所需要的一切.如果您没有使用Spring MVC,那么您需要在您的注册表中注册RequestContextListenerRequestContextFilterweb.xml.