0a1f0b81c57b9cb2fd6da33386d727770053cf7e.svn-base 3.0 KB

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