Java Spring AuthenticationManager和循环依赖
我的情况是,我需要为一个端点使用两种登录机制。Java Spring AuthenticationManager和循环依赖,java,spring,Java,Spring,我的情况是,我需要为一个端点使用两种登录机制。 我已采纳了他的建议 现在遇到了AuthenticationManager的问题 AuthenticationManager位于WebSecurityConfigurerAdapter中,在实现ServiceWebSecurityConfigurer时需要它。但是,ServiceWebSecurityConfigurer用于实现WebSecurityConfigurerAdapter的循环依赖关系 @Configuration @EnableWebS
我已采纳了他的建议 现在遇到了
AuthenticationManager
的问题
AuthenticationManager
位于WebSecurityConfigurerAdapter
中,在实现ServiceWebSecurityConfigurer
时需要它。但是,ServiceWebSecurityConfigurer
用于实现WebSecurityConfigurerAdapter
的循环依赖关系
@Configuration
@EnableWebSecurity
public class UnitedSecurityConfiguration extends WebSecurityConfigurerAdapter {
@Autowired
private List<ServiceWebSecurityConfigurer> serviceWebSecurityConfigurers;
@Override
public void configure(HttpSecurity http) {
serviceWebSecurityConfigurers.forEach(configurer -> configure.config(http));
}
@Bean(name = BeanIds.AUTHENTICATION_MANAGER)
@Override
public AuthenticationManager authenticationManagerBean() throws Exception {
return super.authenticationManagerBean();
}
}
@Configuration
public class SecurityConfiguration implements ServiceWebSecurityConfigurer {
@Autowired
private AuthenticationManager authenticationManager;
@Bean
public SAMLWebSSOHoKProcessingFilter samlWebSSOHoKProcessingFilter() throws Exception {
SAMLWebSSOHoKProcessingFilter samlWebSSOHoKProcessingFilter = new SAMLWebSSOHoKProcessingFilter();
// AuthenticationManager needed here
samlWebSSOHoKProcessingFilter.setAuthenticationManager(authenticationManager);
return samlWebSSOHoKProcessingFilter;
}
}
@配置
@启用Web安全性
公共类UnitedSecurityConfiguration扩展了WebSecurity配置适配器{
@自动连线
私有列表服务Web安全配置程序;
@凌驾
公共无效配置(HttpSecurity http){
servicewebsecurityconfigures.forEach(configurer->configure.config(http));
}
@Bean(name=BeanIds.AUTHENTICATION\u管理器)
@凌驾
公共AuthenticationManager authenticationManagerBean()引发异常{
返回super.authenticationManagerBean();
}
}
@配置
公共类SecurityConfiguration实现ServiceWebSecurity配置器{
@自动连线
私人AuthenticationManager AuthenticationManager;
@豆子
公共SamlWebSShokProcessingFilter SamlWebSShokProcessingFilter()引发异常{
SamlWebSShokProcessingFilter SamlWebSShokProcessingFilter=新的SamlWebSShokProcessingFilter();
//此处需要AuthenticationManager
SamlWebSShokProcessingFilter.setAuthenticationManager(authenticationManager);
返回SamlWebSShokProcessingFilter;
}
}
我怎样才能摆脱这种局面呢?要非常简单地解决您最紧迫的问题,请做一个参考
@Lazy
;这告诉Spring使用惰性代理,它可以解决循环性问题。我强烈建议这样做:
@Bean
公共SamlWebSShokProcessingFilter SamlWebSShokProcessingFilter(
@Lazy AuthenticationManager AuthenticationManager//使用参数而不是字段
){…}//不要使用不必要的抛出子句
为什么要指定一个没有明显作用的重写?authenticationManagerBean()的重写是因为AuthenticationManager不是一个bean-因此是@bean注释如果您使用的是最新的Spring,那么配置类上对@Autowired
字段的需要就被删除了,我建议您删除它。也就是说,您是否尝试过在serviceWebSecurityConfigurers
或authenticationManager
上使用@Lazy
?我不知道@Lazy-这就是诀窍。如果你加上一个答案,我会接受的:-)非常感谢。