关于 druid 监控的两个小问题
前一段时间做一个小需求,需要展示 druid 的监控页面,我们都知道 druid 监控地址是:http://ip:port/druid/index.html,但是当时一直报 404,后来查了资料,引入的 jar 包:
1 2 3 4 5 | <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.2.24</version> </dependency> |
应该是因为不是通过 starter 包引入的,所以需要手动配置:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | package cn.bridgeli.demo; import com.alibaba.druid.support.jakarta.StatViewServlet; import com.alibaba.druid.support.jakarta.WebStatFilter; import com.alibaba.druid.util.Utils; import jakarta.servlet.Filter; import jakarta.servlet.FilterChain; import jakarta.servlet.ServletException; import jakarta.servlet.ServletRequest; import jakarta.servlet.ServletResponse; import org.springframework.boot.web.servlet.FilterRegistrationBean; import org.springframework.boot.web.servlet.ServletRegistrationBean; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import java.io.IOException; @Configuration public class DruidConfig { @Bean public ServletRegistrationBean<StatViewServlet> statViewServlet() { ServletRegistrationBean<StatViewServlet> servletRegistrationBean = new ServletRegistrationBean<>( new StatViewServlet(), "/druid/*" ); // 设置登录用户名和密码 servletRegistrationBean.addInitParameter( "loginUsername" , "BridgeLi" ); servletRegistrationBean.addInitParameter( "loginPassword" , "BridgeLi" ); return servletRegistrationBean; } @Bean public FilterRegistrationBean<WebStatFilter> webStatFilter() { FilterRegistrationBean<WebStatFilter> filterRegistrationBean = new FilterRegistrationBean<>( new WebStatFilter()); filterRegistrationBean.addUrlPatterns( "/*" ); filterRegistrationBean.addInitParameter( "exclusions" , "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*" ); return filterRegistrationBean; } } |
另外一个小问题就是,这么引入之后,打开监控页最下面会有 alibaba 的广告,一般情况下,我们肯定是想去掉的,广告代码所在的位置在 support/http/resources/js/common.js 这个 js 里面,网上有人说直接解压删掉,重新打包就行了,但是这个有问题就是必须用重新打包的这个 jar,搜了一下资料,其实去掉也很简单,在上面的那个类里面增加一个 配置过滤掉即可:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | @Bean public FilterRegistrationBean<Filter> removeDruidAdFilterRegistrationBean() { // 获取web监控页面的参数 // 提取common.js的配置路径 String pattern = "/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(jakarta.servlet.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; } |
如果是引入的 starter 也可以把方法的声明改成下面这种:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | @SuppressWarnings({ "rawtypes" , "unchecked" }) @Bean @ConditionalOnProperty(name = "spring.datasource.druid.statViewServlet.enabled" , havingValue = "true" ) public FilterRegistrationBean removeDruidFilterRegistrationBean(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(javax.servlet.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 registrationBean = new FilterRegistrationBean(); registrationBean.setFilter(filter); registrationBean.addUrlPatterns(commonJsPattern); return registrationBean; } |
其实就是怎么拿到 common.js 而已。
全文完,如果本文对您有所帮助,请花 1 秒钟帮忙点击一下广告,谢谢。
作 者: BridgeLi,https://www.bridgeli.cn
原文链接:http://www.bridgeli.cn/archives/778
版权声明:非特殊声明均为本站原创作品,转载时请注明作者和原文链接。
作 者: BridgeLi,https://www.bridgeli.cn
原文链接:http://www.bridgeli.cn/archives/778
版权声明:非特殊声明均为本站原创作品,转载时请注明作者和原文链接。
近期评论