在校学生一个,没啥业务经验,也没看过源码,还望各位大佬指点
- 在SpringBoot 2.7版本之前,我们在自定义Spring Security配置的时候,通过让配置类继承
WebSecurityConfigurerAdapter类来配置我们的API匹配器和安全需求(via: antMatchers(..).acess(SpEL)) - 然而在SpringBoot 2.7及之后的版本中(不绝对),Spring Security升级到了 5.7.0,官方弃用了这个类
Eg:
- 在今年(2022)2月的一篇官方blog中,官方详细讲解了弃用的原因和弃用后的替代方法:
方法:
- 要么注册一个
SecurityFilterChainBean - 要么注册在
Spring Security 5.4中引入的WebSecurityCustomizerBean
Eg:
- 这里我们用不到这么高的版本,所以我选择了SecurityFilterChain
- 至此,关于新老版本的问题就暂告一段落了,但接下来还有新的问题...
Eg:
问题如图,IDEA提示我们找不到HttpSecurity对应的Bean,提示我们有多个Bean重复注册了
-
这里着实让我找了很久,最终还是在StackOverflow上找到了对应的Question
-
这个Question不仅很新,而且这老哥也是从老版本升级到2.7.X之后出现的问题
-
而下面的解答就让我豁然开朗了:
- 所以这其实是IDEA的问题,它没能探测到Spring Boot中的相关的自动配置(2.7.X版本新增的),从而导致了这个问题:
-
IDEA的官方issue也是比较新的
-
然而解决方法就很简单了,只需要在配置类上添加一个
@EnableWebSecurity注解即可
总结:
- 如果需要从之前的版本换为Spring Boot2.7.X及以上,那么配置Spring Security的方式则需要从之前的继承
WebConfigurerAdapter类变为手动注册SecurityFilterChain或者WebSecurityCustomizer - 为了避免IDEA的bug,最好在该配置上添加
EnableWebSecurity注解