当我项目版本使用为springboot2.7时,spring security的配置类更改后为何会提示无法自动装配?

君杰
  • 3
上海市新手上路,请多包涵

image.png

提示无法装配但不影响程序正常运行,但是该版本为何会出现此原因,与什么有关,对于程序会有怎样的影响?
回复
阅读 381
1 个回答
木原金
  • 50
江苏
✓ 已被采纳

首先,这是IDEA的提示,因为IDEA没有在spring上下文中发现对应Bean的注册,所以会高亮,不影响,IDEA还不够智能,自动配置写多了这种事经常发生,跟Spring的版本关系不大。

其次,你这里的这个提示,主要是因为没有@EnableWebSecurity注解。

再其次,你这个Security的配法也不对,AuthenticationManager 是你不用操心的东西,第一个bean可以删了。

再再其次,放开静态资源不应该用 http.authorizeRequests().antMatcher()而是WebSecurity.ignoring,前者会使请求匿名通过过滤链,后者是避开过滤链,静态资源应该直接避开过滤链减少耗时

@Bean
@Order(SecurityProperties.IGNORED_ORDER)
public WebSecurityCustomizer ignoringCustomizer() {
    return web -> web.ignoring()
            .antMatchers("/webjars/**", "/iconfont/**", "/favicon.ico", "/css/**", "/images/**", "/h-ui/**", "/js/**", "/lib/**", "/h-ui.admin/**");
}

再再再其次,login接口放开,应该用.antMatchers("/login/**").permitAll() 而不是/login,由于security 对于所有不公开访问的 url 都会进行 saveRequest 操作 所以 这里必须放开"/login/**" 而不是"/login",否则错误页面"/login?error" 也会被缓存至 savedRequest中,导致用户重复登录 或者覆盖掉oauth2回调

宣传栏