diff --git a/src/main/java/com/alibaba/druid/support/http/WebStatFilter.java b/src/main/java/com/alibaba/druid/support/http/WebStatFilter.java index dc413d37f3..4dea2225da 100644 --- a/src/main/java/com/alibaba/druid/support/http/WebStatFilter.java +++ b/src/main/java/com/alibaba/druid/support/http/WebStatFilter.java @@ -191,7 +191,7 @@ public class WebStatFilter implements Filter { if (isProfileEnable()) { Profiler.release(nanos); - + Map requestStatsMap = Profiler.getStatsMap(); if (uriStat != null) { uriStat.getProfiletat().record(requestStatsMap); @@ -382,8 +382,9 @@ public class WebStatFilter implements Filter { StatFilterContext.getInstance().addContextListener(statFilterContextListener); this.contextPath = DruidWebUtils.getContextPath(config.getServletContext()); - webAppStat = new WebAppStat(contextPath, this.sessionStatMaxCount); - + if (webAppStat == null) { + webAppStat = new WebAppStat(contextPath, this.sessionStatMaxCount); + } WebAppStatManager.getInstance().addWebAppStatSet(webAppStat); } @@ -412,6 +413,10 @@ public class WebStatFilter implements Filter { this.profileEnable = profileEnable; } + public void setWebAppStat(WebAppStat webAppStat) { + this.webAppStat = webAppStat; + } + public WebAppStat getWebAppStat() { return webAppStat; } diff --git a/src/test/java/com/alibaba/druid/bvt/support/http/WebStatFilterTest3_WebURIStatNull.java b/src/test/java/com/alibaba/druid/bvt/support/http/WebStatFilterTest3_WebURIStatNull.java new file mode 100644 index 0000000000..2394657cc2 --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/support/http/WebStatFilterTest3_WebURIStatNull.java @@ -0,0 +1,80 @@ +/* + * Copyright 1999-2011 Alibaba Group Holding Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.druid.bvt.support.http; + +import java.util.Map; + +import junit.framework.TestCase; + +import org.junit.Assert; +import org.springframework.mock.web.MockFilterChain; +import org.springframework.mock.web.MockFilterConfig; +import org.springframework.mock.web.MockHttpServletRequest; +import org.springframework.mock.web.MockHttpServletResponse; +import org.springframework.mock.web.MockServletContext; + +import com.alibaba.druid.filter.stat.StatFilterContext; +import com.alibaba.druid.support.http.WebStatFilter; +import com.alibaba.druid.support.http.stat.WebAppStat; +import com.alibaba.druid.support.http.stat.WebAppStatManager; +import com.alibaba.druid.support.http.stat.WebURIStat; + +public class WebStatFilterTest3_WebURIStatNull extends TestCase { + + public void test_sessionStatDisable() throws Exception { + MockServletContext servletContext = new MockServletContext(); + + MockFilterConfig filterConfig = new MockFilterConfig(servletContext); + filterConfig.addInitParameter(WebStatFilter.PARAM_NAME_SESSION_STAT_ENABLE, "false"); + + WebStatFilter filter = new WebStatFilter(); + WebAppStat appStat = new WebAppStat() { + public WebURIStat getURIStat(String uri, boolean create) { + return null; + } + }; + filter.setWebAppStat(appStat); + filter.setProfileEnable(true); + + Assert.assertNotNull(filter.getWebAppStat()); + + filter.init(filterConfig); + + Assert.assertSame(appStat, filter.getWebAppStat()); + + Assert.assertFalse(filter.isSessionStatEnable()); + Assert.assertTrue(WebAppStatManager.getInstance().getWebAppStatSet().contains(appStat)); + Assert.assertTrue(StatFilterContext.getInstance().getListeners().contains(filter.getStatFilterContextListener())); + + MockHttpServletRequest request = new MockHttpServletRequest(); + MockHttpServletResponse response = new MockHttpServletResponse(); + MockFilterChain chain = new MockFilterChain(); + + Assert.assertNull(filter.getSessionStat(request)); + + filter.doFilter(request, response, chain); + + Assert.assertEquals(0, appStat.getSessionStatDataList().size()); + + filter.destroy(); + + Assert.assertFalse(WebAppStatManager.getInstance().getWebAppStatSet().contains(appStat)); + Assert.assertFalse(StatFilterContext.getInstance().getListeners().contains(filter.getStatFilterContextListener())); + + Map statData = appStat.getStatData(); + Assert.assertEquals(1L, statData.get("RequestCount")); + } +}