栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

查找从给定客户端IP创建的活动会话数

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

查找从给定客户端IP创建的活动会话数

标准Servlet API并未为此提供便利。最好你可以做的是保持

Map<HttpSession,String>
自己(这里
String
是IP地址),并检查每个
ServletRequest
如果
HttpSession#isNew()
并将其添加到
Map
沿
ServletRequest#getRemoteAddr()
。然后,您可以使用
Collections#frequency()
on
获取具有活动会话的IP地址数量
Map#values()
。你只需要确保您删除
HttpSession
Map
过程中
HttpSessionListener#sessionDestroyed()

所有这些都可以在一次

Listener
实现中完成
ServletContextListener
HttpSessionListener
ServletRequestListener

这是一个启动示例:

public class SessionCounter implements ServletContextListener, HttpSessionListener, ServletRequestListener {    private static final String ATTRIBUTE_NAME = "com.example.SessionCounter";    private Map<HttpSession, String> sessions = new ConcurrentHashMap<HttpSession, String>();    @Override    public void contextInitialized(ServletContextEvent event) {        event.getServletContext().setAttribute(ATTRIBUTE_NAME, this);    }    @Override    public void requestInitialized(ServletRequestEvent event) {        HttpServletRequest request = (HttpServletRequest) event.getServletRequest();        HttpSession session = request.getSession();        if (session.isNew()) { sessions.put(session, request.getRemoteAddr());        }    }    @Override    public void sessionDestroyed(HttpSessionEvent event) {        sessions.remove(event.getSession());    }    @Override    public void sessionCreated(HttpSessionEvent event) {        // NOOP. Useless since we can't obtain IP here.    }    @Override    public void requestDestroyed(ServletRequestEvent event) {        // NOOP. No logic needed.    }    @Override    public void contextDestroyed(ServletContextEvent event) {        // NOOP. No logic needed. Maybe some future cleanup?    }    public static SessionCounter getInstance(ServletContext context) {        return (SessionCounter) context.getAttribute(ATTRIBUTE_NAME);    }    public int getCount(String remoteAddr) {        return Collections.frequency(sessions.values(), remoteAddr);    }}

定义

web.xml
如下:

<listener>    <listener-class>com.example.SessionCounter</listener-class></listener>

您可以在任何servlet中使用它,如下所示:

SessionCounter counter = SessionCounter.getInstance(getServletContext());int count = counter.getCount("127.0.0.1");


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/514999.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号