连接池漏洞检测与弥补

1,在web.xml中加入以下代码:
<filter>
        <filter-name>ConnectionMonitorFilter</filter-name>
        <filter-class>com.servlets.ConnectionMonitorFilter</filter-class>
    </filter>
   
    <filter-mapping>
        <filter-name>ConnectionMonitorFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

2, Filter的实现:


package com.servlets;

import java.io.*;
import java.net.*;
import java.sql.Connection;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import com.common.ConnectionManager;

public class ConnectionMonitorFilter
    implements Filter
{

    public ConnectionMonitorFilter()
    {
        config = null;
    }

    public void init(FilterConfig config)
        throws ServletException
    {
        this.config = config;
    }

    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)
        throws ServletException, IOException
    {
        String server = config.getInitParameter("server-name");
        chain.doFilter(req, res);
        HttpServletRequest request = (HttpServletRequest)req;
        List list = ConnectionManager.getCurrentConnectonList();
        if(list != null)
        {
            int count = 0;
            int leak = 0;
            for(Iterator it = list.iterator(); it.hasNext();)
            {
                count++;
                try
                {
                    Connection conn = (Connection)it.next();
                    if(!conn.isClosed())
                        if(ConnectionManager.isOpenByThread(conn))
                        {
                            leak++;
                            System.out.println("***** [WARN] A Connection Leak Problem Found At " + server + " - " + request.getRequestURL() + " ******");
                            conn.close();
                        } else
                        {
                            System.out.println("Found A Closed Connection Opened By Another Thread");
                        }
                }
                catch(Exception e)
                {
                    System.out.println("***** [WARN] Exception Occured When Closing a Leaked Connection By MonitorFilter ******");
                    e.printStackTrace();
                }
            }

            list.clear();
            ConnectionManager.clear();
            if(leak > 0 && !leakHistory.contains(request.getRequestURI()))
            {
                leakHistory.add(request.getRequestURI());
                String msg = "***** <WARN> A Connection Leak Problem Found At " + server + " - " + request.getRequestURL() + " ******";
            }
        }
    }


    public void destroy()
    {
    }

    public FilterConfig getFilterConfig()
    {
        return config;
    }

    public void setFilterConfig(FilterConfig filterconfig)
    {
        config = filterconfig;
    }

    private FilterConfig config;
    public static ArrayList leakHistory = new ArrayList();

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值