hello,大家好!今天在跟着狂神学习springboot配置druid数据源的时候遇到一个报错浏览器上的报错,如图:
在这里解决了好长时间,此外,去访问在controller类中设置的其他请求映射(@ResquestMapping())也是出现访问失败的情况,网上搜的答案说清除cookie什么的也没有用。于是我重新回到数据源配置类:
@Configuration
public class DruidConfig {
@ConfigurationProperties(prefix = "spring.datasource")
@Bean
public DataSource druidConfigs(){
return new DruidDataSource();
}
//实现后台监控功能:web.xml
@Bean
public ServletRegistrationBean servletViewServlet(){
ServletRegistrationBean<StatViewServlet> bean=new ServletRegistrationBean<>(new StatViewServlet());
//后台需要有人登录,账号密码配置
HashMap<String,String> initParameters=new HashMap<>();
//增加配置
initParameters.put("loginUsername","admin");//登录的key是固定的
initParameters.put("loginPassword","12345");
//允许谁可以访问
initParameters.put("allow","");
//禁止谁能访问 initParamters.put("kuangshen","192.168.11.123")
bean.setInitParameters(initParameters);//设置初始话参数
return bean;
}
于是我查询了一下ServletRegistrationBean的相关资料:
项目中使用了spring-boot-starter-web依赖,spring-boot会在底层自动导入一个DispatchServlet
DispatcherServlet的默认匹配规则为/**
自定义的servlet如果加了urlPatters,则优先使用自定义的servlet,会使配置的拦截器也无法拦截,因为没有走dispatcherServlet的doDispatch方法
还有可能是因为使用servletRegistrationBean没有配置好专属的urlPatter所以失效,也就是说如果没有配置相应的urlmapping的话它默认将全部的url都拦截了下来,所以说在后面还需要加上一个urlmapping地址隐射,下面的配置才能固定工作。
加上下面这个:
ServletRegistrationBean<StatViewServlet> bean = new ServletRegistrationBean<>(new StatViewServlet(),"/druid/*" );
再来尝试一下就可以成功访问到的后台监控功能:
成功进入。希望这篇博客可以很好的帮助到你!