【问题标题】:How to get request object from HttpSessionAttributeListener如何从 HttpSessionAttributeListener 获取请求对象
【发布时间】:2015-05-18 03:28:04
【问题描述】:

如何从 HttpSessionAttributeListener 中获取请求对象来查找用户的 IP 地址?

谢谢!

【问题讨论】:

    标签: java jakarta-ee servlet-filters servlet-listeners


    【解决方案1】:

    您需要实现 ServletRequestListner 才能找到远程 ip 地址。

    import javax.servlet.ServletRequest;
    import javax.servlet.ServletRequestEvent;
    import javax.servlet.ServletRequestListener;
    import javax.servlet.annotation.WebListener;
    
    @WebListener
    public class MyServletRequestListener implements ServletRequestListener {
    
        public void requestDestroyed(ServletRequestEvent servletRequestEvent) {
            ServletRequest servletRequest = servletRequestEvent.getServletRequest();
            System.out.println("ServletRequest destroyed. Remote IP="+servletRequest.getRemoteAddr());
        }
    
        public void requestInitialized(ServletRequestEvent servletRequestEvent) {
            ServletRequest servletRequest = servletRequestEvent.getServletRequest();
            System.out.println("ServletRequest initialized. Remote IP="+servletRequest.getRemoteAddr());
        }
    
    }
    

    参考:http://www.journaldev.com/1945/servlet-listener-example-servletcontextlistener-httpsessionlistener-and-servletrequestlistener

    【讨论】:

    • 但我想知道是否可以在我用于特定目的的 HttpSessionAttributeListener 中获取它,并且我需要保留用户 IP。
    • 如果我无法在此处获取请求,我必须使用过滤器将其添加到会话中,然后从 HttpSessionAttributeListener 中的会话中获取。
    • 我认为使用 HttpSessionAttributeListener 是不可行的。如果您找到任何方法可以在那里获取 ServletRequestEvent 对象,请告诉我..
    • 正如我在之前的评论中所说,实现我们的逻辑需要 HttpSessionAttributeListener。除此之外,我们还需要用户的 IP 地址。所以我们使用了在会话中设置 IP 的过滤器,稍后当控制权来到 HttpSessionAttributeListener 时,我们将从会话中检索 IP。请求对象将在过滤器中可用,我们从过滤器中获取请求对象所需的内容并将其设置在会话中。此会话将在 HttpSessionAttributeListener 中可用。
    猜你喜欢
    • 2021-09-09
    • 2016-08-25
    • 1970-01-01
    • 2011-01-11
    • 1970-01-01
    • 2011-09-10
    • 2012-03-26
    • 2014-05-31
    • 2017-03-22
    相关资源
    最近更新 更多