Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring AuthenticationManager和循环依赖_Java_Spring - Fatal编程技术网

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-这就是诀窍。如果你加上一个答案,我会接受的:-)非常感谢。