【问题标题】:Consistent way of getting current HttpServletRequest in Java EE在 Java EE 中获取当前 HttpServletRequest 的一致方法
【发布时间】:2016-08-05 02:19:55
【问题描述】:

我有一个托管 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在上下文存在之前就调用了这个方法,而这个jsfCtxt就是null,所以没有得到请求。这打破了一切。

在 Java EE 中从托管 bean 获取 HTTP 请求是否有一种单向捕获的方法?

谢谢!

【问题讨论】:

    标签: jsf jakarta-ee jax-rs


    【解决方案1】:

    一致的Java EE方式是CDI。

    @Inject
    private HttpServletRequest request;
    

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

    另见:

    【讨论】:

      猜你喜欢
      • 2010-10-10
      • 1970-01-01
      • 1970-01-01
      • 2011-01-06
      • 1970-01-01
      • 1970-01-01
      • 2013-05-31
      • 2019-05-05
      • 1970-01-01
      相关资源
      最近更新 更多