1. 程式人生 > >61-分IP統計訪問次數

61-分IP統計訪問次數

 



分IP統計訪問次數

我們可以統計一下所有IP
訪問我們伺服器的次數

這樣就可以看出是不是有些人
正在攻擊我們
當然,這只是比較簡單的
比較基礎的辦法

但是學習一下當然是好的


我們先來一個ServletContextListener

public class MainListener implements ServletContextListener {
    @Override
    public void contextInitialized(ServletContextEvent sce) {
        ServletContext ctx = sce.getServletContext();
        LinkedHashMap<String, Integer> map = new LinkedHashMap<>();
        ctx.setAttribute("map", map);
    }

    @Override
    public void contextDestroyed(ServletContextEvent sce) {

    }
}

在context建立的時候,我們就存入一個map



然後我們來一個filter


public class MainFilter implements Filter {

    private FilterConfig config;

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        config = filterConfig;
    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        ServletContext ctx = config.getServletContext();
        Map<String, Integer> map = (Map<String, Integer>) ctx.getAttribute("map");

        String addr = servletRequest.getRemoteAddr();
        if (map.containsKey(addr)) {
            Integer count = map.get(addr);
            map.put(addr, count + 1);
        } else {
            map.put(addr, 1);
        }

        filterChain.doFilter(servletRequest, servletResponse);
    }

    @Override
    public void destroy() {

    }
}

在有請求的時候
我們就拿出map
然後存入count


    <listener>
        <listener-class>listener.MainListener</listener-class>
    </listener>

    <filter>
        <filter-name>mainFilter</filter-name>
        <filter-class>filter.MainFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>mainFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>


註冊一下

然後我們寫一下jsp頁面


<body>

<%
    Map<String, Integer> map = (Map<String, Integer>) application.getAttribute("map");
    String content = map.toString();
%>
<%=content%>

</body>




這樣就OK了

我們訪問一下
127.0.0.1:8080/index.jsp