升级spring-boot版本,从2.7.16到3.2.5,踩坑记录(二)
·
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;
}
}
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)