持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第13天,点击查看活动详情
背景
今天在摸鱼的间隙写一些bug,没想到不写不知道,一写吓一跳,自己真的菜到抠脚,在一个很简单的坑面前浪费了一下午美好 的摸鱼时光。下面就来简单说一下这个经历,希望大家引以为鉴。
经过
事情是这样的,本人在写SpringBoot的crud的时候,由于某些原因写了一个过滤器,要针对一些特殊的url放行,所以我就在application.yml中配置了一个属性,考虑到是好几个类型的url需要放行,所以考虑定义一个数组,然后在filter的configration配置中通过@Value注解注入一个List来获取就行了,so easy,想好了就立马开始敲代码
- yml增加配置
userinfo-filter:
filter-excludeUrls:
- "/user/file/**"
- "/user/sdf/**"
- 在configration中注入
@Configuration
public class UserFilterConfig {
@Value("${userinfo-filter.filter-excludeUrls}")
private List<String> IgnoreUrlList;
/**
* 注册filter
* @return
*/
@Bean
public FilterRegistrationBean filterRegistration() {
FilterRegistrationBean<Filter> registration = new FilterRegistrationBean<>();
registration.setFilter(addUserInfoFilter());
registration.addUrlPatterns("/*");
registration.addInitParameter("excludeUrls", StringUtils.join(IgnoreUrlList, ","));
registration.setName("addUserInfoFilter");
return registration;
}
/**
* addUserInfoFilter
* @return Filter
*/
@Bean
public Filter addUserInfoFilter() {
return new AddUserInfoFilter();
}
}
- 然后在filter中获取excludeUrls进行放行 三下五除二就搞定了,这么简单的事情我甚至都不想验证一下就提交代码。算了,为了满足下自己一次性搞定的成就感我还是验证一下吧。 接着启动项目,postman调用接口。。。打脸了,不起作用,我提起精神,打个断点看下,原来是IgnoreUrlList配置的值没有注入进来,为啥不能注入呢,我试了一遍又一遍就是不行。算了,放下我的自尊心开始百度谷歌。找了一会才发现,原来@Vlaue就是不支持注入数组的,规则就是这样,我的基础还是太差了,这个知识点竟然没有听过,浪费了好些时间。那为啥不支持呢?我不得而知。 但是SpringBoot总是提供了解决办法:使用配置类注入即可。
@Component
@ConfigurationProperties(prefix = "userinfo-filter")
public class UserFilterIgnoreUrlConfig {
private Set<String> filterExcludeUrls;
public Set<String> getFilterExcludeUrls() {
return filterExcludeUrls;
}
public void setFilterExcludeUrls(Set<String> filterExcludeUrls) {
this.filterExcludeUrls = filterExcludeUrls;
}
}
好吧,问题解决了,但是至于为啥不支持数组我还是没搞明白,评论区有大佬知道烦请告知。
总结 古话说得好,基础不牢,地动山摇。真是没错,基础没打好,遇到个基础的小问题就很浪费时间,搞技术还是得脚踏实地打好基础,才能事半功倍。 与大家共勉!