Spring Security新老版本和IDEA引发的一系列问题

493 阅读2分钟

在校学生一个,没啥业务经验,也没看过源码,还望各位大佬指点

  • 在SpringBoot 2.7版本之前,我们在自定义Spring Security配置的时候,通过让配置类继承WebSecurityConfigurerAdapter来配置我们的API匹配器和安全需求(via: antMatchers(..).acess(SpEL))
  • 然而在SpringBoot 2.7及之后的版本中(不绝对),Spring Security升级到了 5.7.0,官方弃用了这个类

Eg:

Xnip2022-07-21_17-07-25.jpg

Xnip2022-07-21_17-09-32.jpg

Xnip2022-07-21_17-10-49.jpg

  • 在今年(2022)2月的一篇官方blog中,官方详细讲解了弃用的原因和弃用后的替代方法: Xnip2022-07-21_17-08-14.jpg

方法:

  • 要么注册一个SecurityFilterChainBean
  • 要么注册在Spring Security 5.4中引入的WebSecurityCustomizerBean

Eg:

Xnip2022-07-21_17-14-33.jpg

Xnip2022-07-21_17-14-48.jpg

  • 这里我们用不到这么高的版本,所以我选择了SecurityFilterChain
  • 至此,关于新老版本的问题就暂告一段落了,但接下来还有新的问题...

Eg:

Xnip2022-07-21_17-16-55.jpg

问题如图,IDEA提示我们找不到HttpSecurity对应的Bean,提示我们有多个Bean重复注册了

  • 这里着实让我找了很久,最终还是在StackOverflow上找到了对应的Question

  • 这个Question不仅很新,而且这老哥也是从老版本升级到2.7.X之后出现的问题 Xnip2022-07-21_17-21-28.jpg

  • 而下面的解答就让我豁然开朗了:

Xnip2022-07-21_17-23-06.jpg

  • 所以这其实是IDEA的问题,它没能探测到Spring Boot中的相关的自动配置(2.7.X版本新增的),从而导致了这个问题:

Xnip2022-07-21_17-25-37.jpg

  • IDEA的官方issue也是比较新的 Xnip2022-07-21_17-28-54.jpg

  • 然而解决方法就很简单了,只需要在配置类上添加一个@EnableWebSecurity注解即可

总结:

  • 如果需要从之前的版本换为Spring Boot2.7.X及以上,那么配置Spring Security的方式则需要从之前的继承WebConfigurerAdapter类变为手动注册SecurityFilterChain或者WebSecurityCustomizer
  • 为了避免IDEA的bug,最好在该配置上添加EnableWebSecurity注解