DruidAdConfig.java 3.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. package org.example;
  2. import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure;
  3. import com.alibaba.druid.spring.boot.autoconfigure.properties.DruidStatProperties;
  4. import com.alibaba.druid.util.Utils;
  5. import org.springframework.boot.autoconfigure.AutoConfigureAfter;
  6. import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
  7. import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication;
  8. import org.springframework.boot.web.servlet.FilterRegistrationBean;
  9. import org.springframework.context.annotation.Bean;
  10. import org.springframework.context.annotation.Configuration;
  11. import javax.servlet.*;
  12. import java.io.IOException;
  13. /**
  14. * Druid广告配置
  15. *
  16. * @author zzp
  17. */
  18. @Configuration
  19. @ConditionalOnWebApplication
  20. @AutoConfigureAfter(DruidDataSourceAutoConfigure.class)
  21. @ConditionalOnProperty(
  22. name = "spring.datasource.druid.stat-view-servlet.enabled",
  23. havingValue = "true",
  24. matchIfMissing = true)
  25. public class DruidAdConfig {
  26. /**
  27. * 去除监控页面底部广告
  28. *
  29. * @param properties
  30. * @return org.springframework.boot.web.servlet.FilterRegistrationBean
  31. */
  32. @Bean
  33. public FilterRegistrationBean removeDruidAdFilterRegistrationBean(
  34. DruidStatProperties properties) {
  35. // 获取web监控页面的参数
  36. DruidStatProperties.StatViewServlet config = properties.getStatViewServlet();
  37. // 提取common.js的配置路径
  38. String pattern = config.getUrlPattern() != null ? config.getUrlPattern() : "/druid/*";
  39. String commonJsPattern = pattern.replaceAll("\\*", "js/common.js");
  40. final String filePath = "support/http/resources/js/common.js";
  41. // 创建filter进行过滤
  42. Filter filter =
  43. new Filter() {
  44. @Override
  45. public void init(FilterConfig filterConfig) throws ServletException {}
  46. @Override
  47. public void doFilter(
  48. ServletRequest request, ServletResponse response, FilterChain chain)
  49. throws IOException, ServletException {
  50. chain.doFilter(request, response);
  51. // 重置缓冲区,响应头不会被重置
  52. response.resetBuffer();
  53. // 获取common.js
  54. String text = Utils.readFromResource(filePath);
  55. // 正则替换banner, 除去底部的广告信息
  56. text = text.replaceAll("<a.*?banner\"></a><br/>", "");
  57. text = text.replaceAll("powered.*?shrek.wang</a>", "");
  58. response.getWriter().write(text);
  59. }
  60. @Override
  61. public void destroy() {}
  62. };
  63. FilterRegistrationBean registrationBean = new FilterRegistrationBean();
  64. registrationBean.setFilter(filter);
  65. registrationBean.addUrlPatterns(commonJsPattern);
  66. return registrationBean;
  67. }
  68. }