gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 04:45:11 24 4
gpt4 key购买 nike

我创建了一个包含 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com