【问题标题】:JBoss AS 7, Java EE 6 how to get clients IP?JBoss AS 7、Java EE 6 如何获取客户端 IP?
【发布时间】:2012-04-04 10:44:48
【问题描述】:

我有一个简单的问题,但我正在寻找更长的时间,但我总是找到相同的答案,我真的不知道如何处理......

当客户注册到我的应用程序时,我想获取客户的 IP 地址...

我发现了这样的东西:

    @ManagedBean(name="testController")
    @SessionScoped
    public class TestController implements Serializable {

        private static final long serialVersionUID = -3244711761400747261L;
        protected final HttpServletRequest req;

        public TestController(HttpServletRequest req) {
            this.req = req;
            System.out.println(this.req.getRemoteAddr().toString());
        }
    }

但我在构造函数中没有 HttpServletRequest.... 或者我不知道如何使用它,我得到的只是错误......

【问题讨论】:

    标签: jsf jsf-2 clientip


    【解决方案1】:

    ExternalContext#getRequest() 提供。

    public TestController() {
        HttpServletRequest request = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();
        System.out.println(request.getRemoteAddr());
    }
    

    请注意,您在最初的尝试中犯了一个重大的概念错误。您正在尝试将当前 HTTP 请求分配为 session 范围的托管 bean 的属性。 HTTP 请求实例将在当前 HTTP 响应结束时过期,因此不再有效,并且当您尝试在创建会话范围 bean 时的初始请求之后的后续请求中访问其方法时,会抛出所有颜色的异常。

    【讨论】:

      【解决方案2】:

      我会采用另一种方法,也用于 Seam Solder 项目:制作一个 servlet 过滤器,用于捕获 servlet 请求并通过应用程序范围的生产者使其可用。查看对应的source code of the solder project

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-05-13
        • 2012-03-31
        • 2012-09-02
        • 2012-04-10
        相关资源
        最近更新 更多