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