资讯专栏INFORMATION COLUMN

删除Druid下方的阿里云广告

incredible / 1425人阅读

摘要:目前的控制台依然存在阿里云的广告,本文通过过滤器将广告文本拦截。定位问题产生广告的文件在。查看源码可知是方法进行植入,由方法调用。

目前druid-1.1.14的web控制台依然存在阿里云的广告,本文通过过滤器将广告文本拦截。

定位问题

产生广告的JS文件在 druid-1.1.14.jar/support/http/resources/js/common.js

查看源码可知是buildFooter方法进行植入,由init方法调用。

解决问题
/**
 * Druid的配置类
 *
 * @author BBF
 */
@Configuration
@AutoConfigureAfter(DruidDataSourceAutoConfigure.class)
public class DruidConfig {

  /**
   * 带有广告的common.js全路径,druid-1.1.14
   */
  private static final String FILE_PATH = "support/http/resources/js/common.js";
  /**
   * 原始脚本,触发构建广告的语句
   */
  private static final String ORIGIN_JS = "this.buildFooter();";
  /**
   * 替换后的脚本
   */
  private static final String NEW_JS = "//this.buildFooter();";

  /**
   * 去除Druid监控页面的广告
   *
   * @param properties DruidStatProperties属性集合
   * @return {@link org.springframework.boot.web.servlet.FilterRegistrationBean}
   */
  @Bean
  @ConditionalOnWebApplication
  @ConditionalOnProperty(name = "spring.datasource.druid.stat-view-servlet.enabled", havingValue = "true")
  public FilterRegistrationBean removeDruidAdFilter(
      DruidStatProperties properties) throws IOException {
    // 获取web监控页面的参数
    DruidStatProperties.StatViewServlet config = properties.getStatViewServlet();
    // 提取common.js的配置路径
    String pattern = config.getUrlPattern() != null ? config.getUrlPattern() : "/druid/*";
    String commonJsPattern = pattern.replaceAll("*", "js/common.js");
    // 获取common.js
    String text = Utils.readFromResource(FILE_PATH);
    // 屏蔽 this.buildFooter(); 不构建广告
    final String newJs = text.replace(ORIGIN_JS, NEW_JS);
    FilterRegistrationBean registration = new FilterRegistrationBean<>();
    registration.setFilter(new RemoveAdFilter(newJs));
    registration.addUrlPatterns(commonJsPattern);
    return registration;
  }

  /**
   * 删除druid的广告过滤器
   *
   * @author BBF
   */
  private class RemoveAdFilter implements Filter {

    private final String newJs;

    public RemoveAdFilter(String newJS) {
      this.newJs = newJS;
    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
        throws IOException, ServletException {
      chain.doFilter(request, response);
      // 重置缓冲区,响应头不会被重置
      response.resetBuffer();
      response.getWriter().write(newJs);
    }
  }
}

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/73565.html

相关文章

  • 【深度】| 值得收藏阿里开源技术

    摘要:淘宝定制基于,是国内第一个优化定制且开源的服务器版虚拟机。数据库开源数据库是基于官方版本的一个分支,由阿里云数据库团队维护,目前也应用于阿里巴巴集团业务以及阿里云数据库服务。淘宝服务器是由淘宝网发起的服务器项目。 Java JAVA 研发框架 SOFAStack SOFAStack(Scalable Open Financial Architecture Stack)是用于快速构建金融...

    econi 评论0 收藏0
  • 网站搭建之PHP环境配置!

    摘要:不知道是不是今日头条进行了系统升级,标题居然可以写这么长一串文字对于一个想在阿里云服务器上搭建网站的小白解决环境配置成了首要问题,手把手教会环境配置不知道有没有和我一样,同在网站建设方面怀揣着一个小目标的同路人。 不知道是不是今日头条进行了系统升级,标题居然可以写这么长一串文字:对于一个想在阿里云ECS服务器上搭建网站的小白?解决环境配置成了首要问题,手把手教会PHP环境配置! 不知道...

    elisa.yang 评论0 收藏0

发表评论

0条评论

incredible

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<