我使用Sping Boot 3,并有以下问题。
下面是我的filterChain
方法:
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http
.csrf().disable()
.sessionManagement()
.sessionCreationPolicy(SessionCreationPolicy.STATELESS)
.and()
.addFilter(new JwtUserNameAndPasswordAuthFilter(authManager(http)))
.authorizeHttpRequests()
.requestMatchers("/", "/index.html", "/css/*", "/js/*").permitAll()
.requestMatchers("/api/**").hasRole(STUDENT.name())
.anyRequest().authenticated();
return http.build();
}
下面是authManager
方法:
@Bean
public AuthenticationManager authManager(HttpSecurity http) throws Exception {
AuthenticationManagerBuilder authenticationManagerBuilder = http
.getSharedObject(AuthenticationManagerBuilder.class);
authenticationManagerBuilder.authenticationProvider(daoAuthenticationProvider());
return authenticationManagerBuilder.build();
}
现在,在此设置下,我得到以下错误
工厂方法“filterChain”引发异常,并显示消息:此对象已生成
如果我删除JWT过滤器,它就可以工作。我假设,因为我让构建AuthenticationManager
,而在filterChain
方法中有另一个构建。
如何在Sping Boot 3下解决这个问题?在filterChain
方法中,我需要构建,因为该方法必须返回SecurityFilterChain
。
我发现this问题,这正是我的问题,但不幸的是,没有答案。
1条答案
按热度按时间9udxz4iz1#
在网上进行了更深入的搜索后,我根据this博客文章找到了答案。
在
filterChain
方法中,我像这样声明了一个authManager
:然后我修改了安全配置如下:
现在,它建立。