1、DruidMonitorConfig 改造:


import com.alibaba.druid.support.http.StatViewServlet;
import com.alibaba.druid.support.http.WebStatFilter;
import org.springframework.beans.factory.annotation.Value;
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;

/**
 * @Author: 
 * @Description: Druid监控配置,Druid版本建议1.1.13,该版本修复了修复监控页面不恰当外链的问题,其中一个开发者留的个人网站外链过期被博彩网站抢注
 * @CreateOn: 11:33 2019/2/22
 * @Version:
 * @Modified By:
 **/
@Configuration
public class DruidMonitorConfig {

    //TODO 目前仅支持statview配置,AOP,webStat等配置尚未集成,考虑在公共基础类中移植druid-spring-boot-starter中

    /**
     * 白名单配置(非必填项目),默认值设置空字符串"",在没有配置的时候初始化为"",避免注入错误
     */
    @Value("${druid.monitor.statView.allow:}")
    private String allow;

    /**
     * 黑名单配置(非必填项目),当白名单和黑名单重复时,黑名单优先级更高,默认值设置空字符串"",在没有配置的时候初始化为"",避免注入错误
     */
    @Value("${druid.monitor.statView.deny:}")
    private String deny;
    /**
     * 监控后台用户名(必填)
     */
    @Value("${druid.monitor.statView.loginUsername:druid}")
    private String loginUsername;
    /**
     * 监控后台用户密码(必填)
     */
    @Value("${druid.monitor.statView.loginPassword:admin@druid}")
    private String loginPassword;
    /**
     * 是否允许计数器重置(必填),默认值不允许,前端按钮并不会不显示,而是点击后显示成功服务端不重置(是坑!)
     */
    @Value("${druid.monitor.statView.resetEnable:false}")
    private String resetEnable;

    /**
     * 配置监控服务器
     * @return ServletRegistrationBean
     */
    @Bean
    public ServletRegistrationBean statViewServletRegistrationBean() {
        ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(new StatViewServlet(), "/druid/*");

        // 添加IP白名单
        if(!"".equals(allow)) {
            servletRegistrationBean.addInitParameter("allow", allow);
        }
        // 添加IP黑名单,当白名单和黑名单重复时,黑名单优先级更高
        if(!"".equals(deny)) {
            servletRegistrationBean.addInitParameter("deny", deny);
        }
        // 添加控制台管理用户
        if(!"".equals(loginUsername)) {
            servletRegistrationBean.addInitParameter("loginUsername", loginUsername);
        }
        // 添加控制台管理用户密码
        if(!"".equals(loginPassword)) {
            servletRegistrationBean.addInitParameter("loginPassword", loginPassword);
        }
        // 是否能够重置数据
        if(!"".equals(resetEnable)) {
            servletRegistrationBean.addInitParameter("resetEnable", resetEnable);
        }
        return servletRegistrationBean;
    }

    /**
     * 配置服务过滤器
     * @return FilterRegistrationBean
     */
    @Bean
    public FilterRegistrationBean filterRegistrationBean() {
        FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(new WebStatFilter());
        filterRegistrationBean.addUrlPatterns("/*");
        filterRegistrationBean.addInitParameter("exclusions", "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");
        filterRegistrationBean.addInitParameter("profileEnable", "true");
        return filterRegistrationBean;
    }
}

改造后:

import com.alibaba.druid.spring.boot3.autoconfigure.properties.DruidStatProperties;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.web.SecurityFilterChain;
import org.springframework.security.web.authentication.www.BasicAuthenticationFilter;


/***
 * @Description: todo:有待测试
 * @Author: 
 * @CreateTime: 2025/8/1 16:19
 * @Version: 1.0
 **/
//@Configuration
//@ConditionalOnWebApplication
//@EnableConfigurationProperties(DruidStatProperties.class)
public class DruidMonitorConfig {

    //TODO 目前仅支持statview配置,AOP,webStat等配置尚未集成,考虑在公共基础类中移植druid-spring-boot-starter中

    /**
     * 白名单配置(非必填项目),默认值设置空字符串"",在没有配置的时候初始化为"",避免注入错误
     */
    @Value("${druid.monitor.statView.allow:}")
    private String allow;

    /**
     * 黑名单配置(非必填项目),当白名单和黑名单重复时,黑名单优先级更高,默认值设置空字符串"",在没有配置的时候初始化为"",避免注入错误
     */
    @Value("${druid.monitor.statView.deny:}")
    private String deny;
    /**
     * 监控后台用户名(必填)
     */
    @Value("${druid.monitor.statView.loginUsername:druid}")
    private String loginUsername;
    /**
     * 监控后台用户密码(必填)
     */
    @Value("${druid.monitor.statView.loginPassword:admin@druid}")
    private String loginPassword;
    /**
     * 是否允许计数器重置(必填),默认值不允许,前端按钮并不会不显示,而是点击后显示成功服务端不重置(是坑!)
     */
    @Value("${druid.monitor.statView.resetEnable:false}")
    private String resetEnable;

    /**
     * 安全访问控制(Spring Security 6+ 适配)
     */
    @Bean
    public SecurityFilterChain druidSecurityFilterChain(HttpSecurity http) throws Exception {
        http
                .securityMatcher("/druid/**")
                .authorizeHttpRequests(auth -> auth
                        .requestMatchers("/druid/login.html").permitAll()
                        .requestMatchers("/druid/**").hasRole("ADMIN")
                )
                .formLogin(form -> form
                        .loginPage("/druid/login.html")
                        .loginProcessingUrl("/druid/submitLogin")
                )
                .csrf(csrf -> csrf.ignoringRequestMatchers("/druid/**"))
                .addFilterBefore(new DruidStatAuthFilter(), BasicAuthenticationFilter.class);
        return http.build();
    }

    /**
     * 监控端点配置(兼容 Actuator)
     */
    @Bean
    public DruidStatProperties.StatViewServlet viewServletConfig() {
        DruidStatProperties.StatViewServlet config = new DruidStatProperties.StatViewServlet();
        config.setEnabled(true);
        config.setLoginUsername(loginUsername);
        config.setLoginPassword(loginPassword);
        config.setResetEnable("false");
        return config;
    }

    @Bean
    public DruidStatProperties.WebStatFilter webStatFilterConfig() {
        DruidStatProperties.WebStatFilter config = new DruidStatProperties.WebStatFilter();
        config.setEnabled(true);
        return config;
    }

}

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐