java - 如何从 servlet 获取 EJB 项目中客户端的远程 IP 地址?

标签 java servlets jakarta-ee ejb ip-address

我创建了一个包含 EJB 项目和一个 Web 项目的企业应用程序项目,并且运行良好。现在我想获取 EJB 项目中远程客户端的 IP 地址,用于我的应用程序中的某些逻辑。我尝试在 Web 部件中创建一个上下文类,如下所示:

上下文.java

public class Context {
  private static ThreadLocal<Context> instance = new ThreadLocal<Context>();
  private HttpServletRequest request;

  private Context(HttpServletRequest request) {
    this.request = request;
  }

  public static Context getCurrentInstance() {
    return instance.get();
  }

  public static Context newInstance(HttpServletRequest request) {
    Context context = new Context(request);
    instance.set(context);
    return context;
  }

  public HttpServletRequest getRequest() {
    return request;
  }
}

从 EJB 的类中,我尝试像这样调用上下文类:

public String setIPAddress() {

    HttpServletRequest request = Context.getCurrentInstance().getRequest();
    String remoteIPAddress = request.getRemoteAddr();

    return remoteIPAddress;
}

我的问题是我无法从 EJB 类调用 context.java,如果我在 EJB 部分中包含类上下文,我会得到 NullPointerException。我还尝试将 Web 项目包含在 EJB projcet 属性中,但出现错误“无法添加循环引用”。我正在使用 Netbeans。在这种情况下,如何获取远程 IP 地址?

最佳答案

不建议这样做,但如果你需要它可以使用这个:

import javax.ejb.Stateless;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpServletRequest;

@Stateless
public class MyServiceBean {

    public void initialize() {

        final HttpServletRequest request = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();
        System.out.println("IP:" + request.getRemoteAddr());

        // load data
    }

}

关于java - 如何从 servlet 获取 EJB 项目中客户端的远程 IP 地址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37470127/

相关文章:

spring - 通过 Spring Security 进行单点登录

java - 如何创建控制电脑鼠标的android应用程序

java - R.java 丢失,导致此问题的其他可能错误是什么?

java - mockito 对带参数的方法不做任何贡献

java - 如何通过Amazon Web Services 上传Servlet/JSP 网站?

servlets - 从 Web 应用程序(servlet)提交远程 Hadoop 集群上的 Hadoop 作业

java - Websocket 不工作 : unexpected responce code 404

java - if 条件太多 Java

java - 在java servlet中将文件从共享文件夹复制到本地文件夹

java - 如何热部署maven项目到glassfish?