在Java EE中获取当前HttpServlet请求的一致方式



我有一个托管bean(@Named@RequestScoped(,应用程序的其余部分使用它来检索正在处理的当前请求的客户端的IP地址。这个bean在JSF和JAX-RS上下文中都使用。

对于JAX-RS,我使用将请求注入字段

 @Context
 HttpServletRequest httpRequest;

如果是null,我会尝试得到这样的请求:

final FacesContext jsfCtxt = FacesContext.getCurrentInstance();
        if ( jsfCtxt != null ) {
            return (HttpServletRequest) jsfCtxt.getExternalContext().getRequest();
        } else {
            Logger.getLogger(DataverseRequestServiceBean.class.getName()).log(Level.WARNING, "Cannot get the HTTP request object.");
            return null;
        }

但是,JSF上下文中的一些bean在上下文存在之前调用此方法,而此jsfCtxtnull,因此不会获得任何请求。这就把事情搞砸了。

是否有一种从托管bean获取JavaEE中的HTTP请求的单向catch-em-all方法?

谢谢!

一致的Java EE方式是CDI。

@Inject
private HttpServletRequest request;

确保将JAX-RS资源注释为@RequestScoped,以使其也能在那里工作。

另请参阅:

  • 支持Bean(@ManagedBean(还是CDI Bean(@Named(
  • Java EE 7教程-在JAX-RS中集成CDI

相关内容

  • 没有找到相关文章

最新更新