DruidConfig.java 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. package org.jeecg.config;
  2. import java.io.IOException;
  3. import javax.servlet.*;
  4. import org.springframework.boot.autoconfigure.AutoConfigureAfter;
  5. import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
  6. import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication;
  7. import org.springframework.boot.web.servlet.FilterRegistrationBean;
  8. import org.springframework.context.annotation.Bean;
  9. import org.springframework.context.annotation.Configuration;
  10. import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure;
  11. import com.alibaba.druid.spring.boot.autoconfigure.properties.DruidStatProperties;
  12. import com.alibaba.druid.util.Utils;
  13. /**
  14. * @Description: DruidConfig配置类
  15. * @author: jeecg-boot
  16. */
  17. @Configuration
  18. @AutoConfigureAfter(DruidDataSourceAutoConfigure.class)
  19. public class DruidConfig {
  20. /**
  21. * 带有广告的common.js全路径,druid-1.1.14
  22. */
  23. private static final String FILE_PATH = "support/http/resources/js/common.js";
  24. /**
  25. * 原始脚本,触发构建广告的语句
  26. */
  27. private static final String ORIGIN_JS = "this.buildFooter();";
  28. /**
  29. * 替换后的脚本
  30. */
  31. private static final String NEW_JS = "//this.buildFooter();";
  32. /**
  33. * 去除Druid监控页面的广告
  34. *
  35. * @param properties DruidStatProperties属性集合
  36. * @return {@link FilterRegistrationBean}
  37. */
  38. @Bean
  39. @ConditionalOnWebApplication
  40. @ConditionalOnProperty(name = "spring.datasource.druid.stat-view-servlet.enabled", havingValue = "true")
  41. public FilterRegistrationBean<RemoveAdFilter> removeDruidAdFilter(
  42. DruidStatProperties properties) throws IOException {
  43. // 获取web监控页面的参数
  44. DruidStatProperties.StatViewServlet config = properties.getStatViewServlet();
  45. // 提取common.js的配置路径
  46. String pattern = config.getUrlPattern() != null ? config.getUrlPattern() : "/druid/*";
  47. String commonJsPattern = pattern.replaceAll("\\*", "js/common.js");
  48. // 获取common.js
  49. String text = Utils.readFromResource(FILE_PATH);
  50. // 屏蔽 this.buildFooter(); 不构建广告
  51. final String newJs = text.replace(ORIGIN_JS, NEW_JS);
  52. FilterRegistrationBean<RemoveAdFilter> registration = new FilterRegistrationBean<>();
  53. registration.setFilter(new RemoveAdFilter(newJs));
  54. registration.addUrlPatterns(commonJsPattern);
  55. return registration;
  56. }
  57. /**
  58. * 删除druid的广告过滤器
  59. *
  60. * @author BBF
  61. */
  62. private class RemoveAdFilter implements Filter {
  63. private final String newJs;
  64. public RemoveAdFilter(String newJs) {
  65. this.newJs = newJs;
  66. }
  67. @Override
  68. public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
  69. throws IOException, ServletException {
  70. chain.doFilter(request, response);
  71. // 重置缓冲区,响应头不会被重置
  72. response.resetBuffer();
  73. response.getWriter().write(newJs);
  74. }
  75. }
  76. }