WANG vor 6 Jahren
Ursprung
Commit
7d33ff6657

+ 44 - 0
src/main/java/cn/com/qmth/examcloud/web/druid/DruidDataSourceAutoConfigure.java

@@ -0,0 +1,44 @@
+package cn.com.qmth.examcloud.web.druid;
+
+import javax.sql.DataSource;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.boot.autoconfigure.AutoConfigureBefore;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
+import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
+import org.springframework.boot.autoconfigure.jdbc.DataSourceProperties;
+import org.springframework.boot.context.properties.EnableConfigurationProperties;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Import;
+
+import com.alibaba.druid.pool.DruidDataSource;
+
+import cn.com.qmth.examcloud.web.druid.properties.DruidStatProperties;
+import cn.com.qmth.examcloud.web.druid.stat.DruidFilterConfiguration;
+import cn.com.qmth.examcloud.web.druid.stat.DruidSpringAopConfiguration;
+import cn.com.qmth.examcloud.web.druid.stat.DruidStatViewServletConfiguration;
+import cn.com.qmth.examcloud.web.druid.stat.DruidWebStatFilterConfiguration;
+
+@Configuration
+@ConditionalOnClass(DruidDataSource.class)
+@AutoConfigureBefore(DataSourceAutoConfiguration.class)
+@EnableConfigurationProperties({DruidStatProperties.class, DataSourceProperties.class})
+@Import({DruidSpringAopConfiguration.class, DruidStatViewServletConfiguration.class,
+		DruidWebStatFilterConfiguration.class, DruidFilterConfiguration.class})
+public class DruidDataSourceAutoConfigure {
+
+	private static final Logger LOGGER = LoggerFactory
+			.getLogger(DruidDataSourceAutoConfigure.class);
+
+	@Bean(initMethod = "init")
+	@ConditionalOnMissingBean
+	@ConditionalOnProperty(name = "spring.datasource.type", havingValue = "com.alibaba.druid.pool.DruidDataSource", matchIfMissing = false)
+	public DataSource dataSource() {
+		LOGGER.info("Init DruidDataSource");
+		return new DruidDataSourceWrapper();
+	}
+}

+ 21 - 0
src/main/java/cn/com/qmth/examcloud/web/druid/DruidDataSourceBuilder.java

@@ -0,0 +1,21 @@
+package cn.com.qmth.examcloud.web.druid;
+
+import com.alibaba.druid.pool.DruidDataSource;
+
+public class DruidDataSourceBuilder {
+
+	public static DruidDataSourceBuilder create() {
+		return new DruidDataSourceBuilder();
+	}
+
+	/**
+	 * For build multiple DruidDataSource, detail see document.
+	 *
+	 * ------- The method is history, and now you can use 'new
+	 * DruidDataSourceWrapper()' instead.
+	 */
+	public DruidDataSource build() {
+		return new DruidDataSourceWrapper();
+	}
+
+}

+ 98 - 0
src/main/java/cn/com/qmth/examcloud/web/druid/DruidDataSourceWrapper.java

@@ -0,0 +1,98 @@
+package cn.com.qmth.examcloud.web.druid;
+
+import com.alibaba.druid.filter.config.ConfigFilter;
+import com.alibaba.druid.filter.encoding.EncodingConvertFilter;
+import com.alibaba.druid.filter.logging.CommonsLogFilter;
+import com.alibaba.druid.filter.logging.Log4j2Filter;
+import com.alibaba.druid.filter.logging.Log4jFilter;
+import com.alibaba.druid.filter.logging.Slf4jLogFilter;
+import com.alibaba.druid.filter.stat.StatFilter;
+import com.alibaba.druid.pool.DruidDataSource;
+import com.alibaba.druid.wall.WallFilter;
+
+import org.springframework.beans.factory.InitializingBean;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.autoconfigure.jdbc.DataSourceProperties;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+
+@ConfigurationProperties("spring.datasource.druid")
+class DruidDataSourceWrapper extends DruidDataSource implements InitializingBean {
+
+	private static final long serialVersionUID = -1485354381332792381L;
+
+	@Autowired
+	private DataSourceProperties basicProperties;
+
+	@Override
+	public void afterPropertiesSet() throws Exception {
+		if (super.getUsername() == null) {
+			super.setUsername(basicProperties.determineUsername());
+		}
+		if (super.getPassword() == null) {
+			super.setPassword(basicProperties.determinePassword());
+		}
+		if (super.getUrl() == null) {
+			super.setUrl(basicProperties.determineUrl());
+		}
+		if (super.getDriverClassName() == null) {
+			super.setDriverClassName(basicProperties.getDriverClassName());
+		}
+	}
+
+	@Autowired(required = false)
+	public void addStatFilter(StatFilter statFilter) {
+		super.filters.add(statFilter);
+	}
+
+	@Autowired(required = false)
+	public void addConfigFilter(ConfigFilter configFilter) {
+		super.filters.add(configFilter);
+	}
+
+	@Autowired(required = false)
+	public void addEncodingConvertFilter(EncodingConvertFilter encodingConvertFilter) {
+		super.filters.add(encodingConvertFilter);
+	}
+
+	@Autowired(required = false)
+	public void addSlf4jLogFilter(Slf4jLogFilter slf4jLogFilter) {
+		super.filters.add(slf4jLogFilter);
+	}
+
+	@Autowired(required = false)
+	public void addLog4jFilter(Log4jFilter log4jFilter) {
+		super.filters.add(log4jFilter);
+	}
+
+	@Autowired(required = false)
+	public void addLog4j2Filter(Log4j2Filter log4j2Filter) {
+		super.filters.add(log4j2Filter);
+	}
+
+	@Autowired(required = false)
+	public void addCommonsLogFilter(CommonsLogFilter commonsLogFilter) {
+		super.filters.add(commonsLogFilter);
+	}
+
+	@Autowired(required = false)
+	public void addWallFilter(WallFilter wallFilter) {
+		super.filters.add(wallFilter);
+	}
+
+	/**
+	 * Ignore the 'maxEvictableIdleTimeMillis < minEvictableIdleTimeMillis'
+	 * validate, it will be validated again in {@link DruidDataSource#init()}.
+	 *
+	 * for fix issue #3084, #2763
+	 *
+	 * @since 1.1.14
+	 */
+	@Override
+	public void setMaxEvictableIdleTimeMillis(long maxEvictableIdleTimeMillis) {
+		try {
+			super.setMaxEvictableIdleTimeMillis(maxEvictableIdleTimeMillis);
+		} catch (IllegalArgumentException ignore) {
+			super.maxEvictableIdleTimeMillis = maxEvictableIdleTimeMillis;
+		}
+	}
+}

+ 72 - 0
src/main/java/cn/com/qmth/examcloud/web/druid/RemoveDruidAdConfig.java

@@ -0,0 +1,72 @@
+package cn.com.qmth.examcloud.web.druid;
+
+import java.io.IOException;
+
+import javax.servlet.Filter;
+import javax.servlet.FilterChain;
+import javax.servlet.FilterConfig;
+import javax.servlet.ServletException;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+
+import org.springframework.boot.autoconfigure.AutoConfigureAfter;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication;
+import org.springframework.boot.web.servlet.FilterRegistrationBean;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+import com.alibaba.druid.util.Utils;
+
+import cn.com.qmth.examcloud.web.druid.properties.DruidStatProperties;
+
+/**
+ * 去除druid监控页面底部的广告
+ */
+@Configuration
+@ConditionalOnWebApplication
+@AutoConfigureAfter(DruidDataSourceAutoConfigure.class)
+@ConditionalOnProperty(name = "spring.datasource.druid.stat-view-servlet.enabled", havingValue = "true", matchIfMissing = true)
+public class RemoveDruidAdConfig {
+
+	@Bean
+	public FilterRegistrationBean<?> removeDruidAdFilterRegistrationBean(
+			DruidStatProperties properties) {
+		// 获取web监控页面的参数
+		DruidStatProperties.StatViewServlet config = properties.getStatViewServlet();
+		// 提取common.js的配置路径
+		String pattern = config.getUrlPattern() != null ? config.getUrlPattern() : "/druid/*";
+		String commonJsPattern = pattern.replaceAll("\\*", "js/common.js");
+
+		final String filePath = "support/http/resources/js/common.js";
+
+		// 创建filter进行过滤
+		Filter filter = new Filter() {
+			@Override
+			public void init(FilterConfig filterConfig) throws ServletException {
+			}
+
+			@Override
+			public void doFilter(ServletRequest request, ServletResponse response,
+					FilterChain chain) throws IOException, ServletException {
+				chain.doFilter(request, response);
+				// 重置缓冲区,响应头不会被重置
+				response.resetBuffer();
+				// 获取common.js
+				String text = Utils.readFromResource(filePath);
+				// 正则替换banner, 除去底部的广告信息
+				text = text.replaceAll("<a.*?banner\"></a><br/>", "");
+				text = text.replaceAll("powered.*?shrek.wang</a>", "");
+				response.getWriter().write(text);
+			}
+
+			@Override
+			public void destroy() {
+			}
+		};
+		FilterRegistrationBean<Filter> registrationBean = new FilterRegistrationBean<>();
+		registrationBean.setFilter(filter);
+		registrationBean.addUrlPatterns(commonJsPattern);
+		return registrationBean;
+	}
+}

+ 196 - 0
src/main/java/cn/com/qmth/examcloud/web/druid/properties/DruidStatProperties.java

@@ -0,0 +1,196 @@
+package cn.com.qmth.examcloud.web.druid.properties;
+
+import org.springframework.boot.context.properties.ConfigurationProperties;
+
+@ConfigurationProperties("spring.datasource.druid")
+public class DruidStatProperties {
+	private String[] aopPatterns;
+
+	private StatViewServlet statViewServlet = new StatViewServlet();
+
+	private WebStatFilter webStatFilter = new WebStatFilter();
+
+	public String[] getAopPatterns() {
+		return aopPatterns;
+	}
+
+	public void setAopPatterns(String[] aopPatterns) {
+		this.aopPatterns = aopPatterns;
+	}
+
+	public StatViewServlet getStatViewServlet() {
+		return statViewServlet;
+	}
+
+	public void setStatViewServlet(StatViewServlet statViewServlet) {
+		this.statViewServlet = statViewServlet;
+	}
+
+	public WebStatFilter getWebStatFilter() {
+		return webStatFilter;
+	}
+
+	public void setWebStatFilter(WebStatFilter webStatFilter) {
+		this.webStatFilter = webStatFilter;
+	}
+
+	public static class StatViewServlet {
+		/**
+		 * Enable StatViewServlet, default false.
+		 */
+		private boolean enabled;
+
+		private String urlPattern;
+
+		private String allow;
+
+		private String deny;
+
+		private String loginUsername;
+
+		private String loginPassword;
+
+		private String resetEnable;
+
+		public boolean isEnabled() {
+			return enabled;
+		}
+
+		public void setEnabled(boolean enabled) {
+			this.enabled = enabled;
+		}
+
+		public String getUrlPattern() {
+			return urlPattern;
+		}
+
+		public void setUrlPattern(String urlPattern) {
+			this.urlPattern = urlPattern;
+		}
+
+		public String getAllow() {
+			return allow;
+		}
+
+		public void setAllow(String allow) {
+			this.allow = allow;
+		}
+
+		public String getDeny() {
+			return deny;
+		}
+
+		public void setDeny(String deny) {
+			this.deny = deny;
+		}
+
+		public String getLoginUsername() {
+			return loginUsername;
+		}
+
+		public void setLoginUsername(String loginUsername) {
+			this.loginUsername = loginUsername;
+		}
+
+		public String getLoginPassword() {
+			return loginPassword;
+		}
+
+		public void setLoginPassword(String loginPassword) {
+			this.loginPassword = loginPassword;
+		}
+
+		public String getResetEnable() {
+			return resetEnable;
+		}
+
+		public void setResetEnable(String resetEnable) {
+			this.resetEnable = resetEnable;
+		}
+	}
+
+	public static class WebStatFilter {
+		/**
+		 * Enable WebStatFilter, default false.
+		 */
+		private boolean enabled;
+
+		private String urlPattern;
+
+		private String exclusions;
+
+		private String sessionStatMaxCount;
+
+		private String sessionStatEnable;
+
+		private String principalSessionName;
+
+		private String principalCookieName;
+
+		private String profileEnable;
+
+		public boolean isEnabled() {
+			return enabled;
+		}
+
+		public void setEnabled(boolean enabled) {
+			this.enabled = enabled;
+		}
+
+		public String getUrlPattern() {
+			return urlPattern;
+		}
+
+		public void setUrlPattern(String urlPattern) {
+			this.urlPattern = urlPattern;
+		}
+
+		public String getExclusions() {
+			return exclusions;
+		}
+
+		public void setExclusions(String exclusions) {
+			this.exclusions = exclusions;
+		}
+
+		public String getSessionStatMaxCount() {
+			return sessionStatMaxCount;
+		}
+
+		public void setSessionStatMaxCount(String sessionStatMaxCount) {
+			this.sessionStatMaxCount = sessionStatMaxCount;
+		}
+
+		public String getSessionStatEnable() {
+			return sessionStatEnable;
+		}
+
+		public void setSessionStatEnable(String sessionStatEnable) {
+			this.sessionStatEnable = sessionStatEnable;
+		}
+
+		public String getPrincipalSessionName() {
+			return principalSessionName;
+		}
+
+		public void setPrincipalSessionName(String principalSessionName) {
+			this.principalSessionName = principalSessionName;
+		}
+
+		public String getPrincipalCookieName() {
+			return principalCookieName;
+		}
+
+		public void setPrincipalCookieName(String principalCookieName) {
+			this.principalCookieName = principalCookieName;
+		}
+
+		public String getProfileEnable() {
+			return profileEnable;
+		}
+
+		public void setProfileEnable(String profileEnable) {
+			this.profileEnable = profileEnable;
+		}
+	}
+}

+ 108 - 0
src/main/java/cn/com/qmth/examcloud/web/druid/stat/DruidFilterConfiguration.java

@@ -0,0 +1,108 @@
+package cn.com.qmth.examcloud.web.druid.stat;
+
+import com.alibaba.druid.filter.config.ConfigFilter;
+import com.alibaba.druid.filter.encoding.EncodingConvertFilter;
+import com.alibaba.druid.filter.logging.*;
+import com.alibaba.druid.filter.stat.StatFilter;
+import com.alibaba.druid.wall.WallConfig;
+import com.alibaba.druid.wall.WallFilter;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.context.annotation.Bean;
+
+public class DruidFilterConfiguration {
+
+	@Bean
+	@ConfigurationProperties(FILTER_STAT_PREFIX)
+	@ConditionalOnProperty(prefix = FILTER_STAT_PREFIX, name = "enabled")
+	@ConditionalOnMissingBean
+	public StatFilter statFilter() {
+		return new StatFilter();
+	}
+
+	@Bean
+	@ConfigurationProperties(FILTER_CONFIG_PREFIX)
+	@ConditionalOnProperty(prefix = FILTER_CONFIG_PREFIX, name = "enabled")
+	@ConditionalOnMissingBean
+	public ConfigFilter configFilter() {
+		return new ConfigFilter();
+	}
+
+	@Bean
+	@ConfigurationProperties(FILTER_ENCODING_PREFIX)
+	@ConditionalOnProperty(prefix = FILTER_ENCODING_PREFIX, name = "enabled")
+	@ConditionalOnMissingBean
+	public EncodingConvertFilter encodingConvertFilter() {
+		return new EncodingConvertFilter();
+	}
+
+	@Bean
+	@ConfigurationProperties(FILTER_SLF4J_PREFIX)
+	@ConditionalOnProperty(prefix = FILTER_SLF4J_PREFIX, name = "enabled")
+	@ConditionalOnMissingBean
+	public Slf4jLogFilter slf4jLogFilter() {
+		return new Slf4jLogFilter();
+	}
+
+	@Bean
+	@ConfigurationProperties(FILTER_LOG4J_PREFIX)
+	@ConditionalOnProperty(prefix = FILTER_LOG4J_PREFIX, name = "enabled")
+	@ConditionalOnMissingBean
+	public Log4jFilter log4jFilter() {
+		return new Log4jFilter();
+	}
+
+	@Bean
+	@ConfigurationProperties(FILTER_LOG4J2_PREFIX)
+	@ConditionalOnProperty(prefix = FILTER_LOG4J2_PREFIX, name = "enabled")
+	@ConditionalOnMissingBean
+	public Log4j2Filter log4j2Filter() {
+		return new Log4j2Filter();
+	}
+
+	@Bean
+	@ConfigurationProperties(FILTER_COMMONS_LOG_PREFIX)
+	@ConditionalOnProperty(prefix = FILTER_COMMONS_LOG_PREFIX, name = "enabled")
+	@ConditionalOnMissingBean
+	public CommonsLogFilter commonsLogFilter() {
+		return new CommonsLogFilter();
+	}
+
+	@Bean
+	@ConfigurationProperties(FILTER_WALL_CONFIG_PREFIX)
+	@ConditionalOnProperty(prefix = FILTER_WALL_PREFIX, name = "enabled")
+	@ConditionalOnMissingBean
+	public WallConfig wallConfig() {
+		return new WallConfig();
+	}
+
+	@Bean
+	@ConfigurationProperties(FILTER_WALL_PREFIX)
+	@ConditionalOnProperty(prefix = FILTER_WALL_PREFIX, name = "enabled")
+	@ConditionalOnMissingBean
+	public WallFilter wallFilter(WallConfig wallConfig) {
+		WallFilter filter = new WallFilter();
+		filter.setConfig(wallConfig);
+		return filter;
+	}
+
+	private static final String FILTER_STAT_PREFIX = "spring.datasource.druid.filter.stat";
+
+	private static final String FILTER_CONFIG_PREFIX = "spring.datasource.druid.filter.config";
+
+	private static final String FILTER_ENCODING_PREFIX = "spring.datasource.druid.filter.encoding";
+
+	private static final String FILTER_SLF4J_PREFIX = "spring.datasource.druid.filter.slf4j";
+
+	private static final String FILTER_LOG4J_PREFIX = "spring.datasource.druid.filter.log4j";
+
+	private static final String FILTER_LOG4J2_PREFIX = "spring.datasource.druid.filter.log4j2";
+
+	private static final String FILTER_COMMONS_LOG_PREFIX = "spring.datasource.druid.filter.commons-log";
+
+	private static final String FILTER_WALL_PREFIX = "spring.datasource.druid.filter.wall";
+
+	private static final String FILTER_WALL_CONFIG_PREFIX = FILTER_WALL_PREFIX + ".config";
+
+}

+ 33 - 0
src/main/java/cn/com/qmth/examcloud/web/druid/stat/DruidSpringAopConfiguration.java

@@ -0,0 +1,33 @@
+package cn.com.qmth.examcloud.web.druid.stat;
+
+import org.aopalliance.aop.Advice;
+import org.springframework.aop.Advisor;
+import org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator;
+import org.springframework.aop.support.RegexpMethodPointcutAdvisor;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
+import org.springframework.context.annotation.Bean;
+
+import com.alibaba.druid.support.spring.stat.DruidStatInterceptor;
+
+import cn.com.qmth.examcloud.web.druid.properties.DruidStatProperties;
+
+@ConditionalOnProperty("spring.datasource.druid.aop-patterns")
+public class DruidSpringAopConfiguration {
+
+	@Bean
+	public Advice advice() {
+		return new DruidStatInterceptor();
+	}
+
+	@Bean
+	public Advisor advisor(DruidStatProperties properties) {
+		return new RegexpMethodPointcutAdvisor(properties.getAopPatterns(), advice());
+	}
+
+	@Bean
+	public DefaultAdvisorAutoProxyCreator advisorAutoProxyCreator() {
+		DefaultAdvisorAutoProxyCreator advisorAutoProxyCreator = new DefaultAdvisorAutoProxyCreator();
+		advisorAutoProxyCreator.setProxyTargetClass(true);
+		return advisorAutoProxyCreator;
+	}
+}

+ 41 - 0
src/main/java/cn/com/qmth/examcloud/web/druid/stat/DruidStatViewServletConfiguration.java

@@ -0,0 +1,41 @@
+package cn.com.qmth.examcloud.web.druid.stat;
+
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication;
+import org.springframework.boot.web.servlet.ServletRegistrationBean;
+import org.springframework.context.annotation.Bean;
+
+import com.alibaba.druid.support.http.StatViewServlet;
+
+import cn.com.qmth.examcloud.web.druid.properties.DruidStatProperties;
+
+@ConditionalOnWebApplication
+@ConditionalOnProperty(name = "spring.datasource.druid.stat-view-servlet.enabled", havingValue = "true")
+public class DruidStatViewServletConfiguration {
+
+	@Bean
+	public ServletRegistrationBean<StatViewServlet> statViewServletRegistrationBean(
+			DruidStatProperties properties) {
+		DruidStatProperties.StatViewServlet config = properties.getStatViewServlet();
+		ServletRegistrationBean<StatViewServlet> registrationBean = new ServletRegistrationBean<>();
+		registrationBean.setServlet(new StatViewServlet());
+		registrationBean.addUrlMappings(
+				config.getUrlPattern() != null ? config.getUrlPattern() : "/druid/*");
+		if (config.getAllow() != null) {
+			registrationBean.addInitParameter("allow", config.getAllow());
+		}
+		if (config.getDeny() != null) {
+			registrationBean.addInitParameter("deny", config.getDeny());
+		}
+		if (config.getLoginUsername() != null) {
+			registrationBean.addInitParameter("loginUsername", config.getLoginUsername());
+		}
+		if (config.getLoginPassword() != null) {
+			registrationBean.addInitParameter("loginPassword", config.getLoginPassword());
+		}
+		if (config.getResetEnable() != null) {
+			registrationBean.addInitParameter("resetEnable", config.getResetEnable());
+		}
+		return registrationBean;
+	}
+}

+ 48 - 0
src/main/java/cn/com/qmth/examcloud/web/druid/stat/DruidWebStatFilterConfiguration.java

@@ -0,0 +1,48 @@
+package cn.com.qmth.examcloud.web.druid.stat;
+
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication;
+import org.springframework.boot.web.servlet.FilterRegistrationBean;
+import org.springframework.context.annotation.Bean;
+
+import com.alibaba.druid.support.http.WebStatFilter;
+
+import cn.com.qmth.examcloud.web.druid.properties.DruidStatProperties;
+
+@ConditionalOnWebApplication
+@ConditionalOnProperty(name = "spring.datasource.druid.web-stat-filter.enabled", havingValue = "true")
+public class DruidWebStatFilterConfiguration {
+	@Bean
+	public FilterRegistrationBean<WebStatFilter> webStatFilterRegistrationBean(
+			DruidStatProperties properties) {
+		DruidStatProperties.WebStatFilter config = properties.getWebStatFilter();
+		FilterRegistrationBean<WebStatFilter> registrationBean = new FilterRegistrationBean<>();
+		WebStatFilter filter = new WebStatFilter();
+		registrationBean.setFilter(filter);
+		registrationBean
+				.addUrlPatterns(config.getUrlPattern() != null ? config.getUrlPattern() : "/*");
+		registrationBean.addInitParameter("exclusions",
+				config.getExclusions() != null
+						? config.getExclusions()
+						: "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");
+		if (config.getSessionStatEnable() != null) {
+			registrationBean.addInitParameter("sessionStatEnable", config.getSessionStatEnable());
+		}
+		if (config.getSessionStatMaxCount() != null) {
+			registrationBean.addInitParameter("sessionStatMaxCount",
+					config.getSessionStatMaxCount());
+		}
+		if (config.getPrincipalSessionName() != null) {
+			registrationBean.addInitParameter("principalSessionName",
+					config.getPrincipalSessionName());
+		}
+		if (config.getPrincipalCookieName() != null) {
+			registrationBean.addInitParameter("principalCookieName",
+					config.getPrincipalCookieName());
+		}
+		if (config.getProfileEnable() != null) {
+			registrationBean.addInitParameter("profileEnable", config.getProfileEnable());
+		}
+		return registrationBean;
+	}
+}