Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.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依赖项顺序?_Java_Spring_Spring Security_Spring Boot - Fatal编程技术网

Java 如何调试spring依赖项顺序?

Java 如何调试spring依赖项顺序?,java,spring,spring-security,spring-boot,Java,Spring,Spring Security,Spring Boot,在这个问题背后,我想了解和调试Springbean是如何实例化的(以什么顺序)以及依赖关系是如何解析的 上下文 我正在使用: 弹簧靴 春季安全 spring数据JPA 我在DAO安全性注释中添加了如下内容: @PreAuthorize("hasRole('ROLE_ADMIN') OR hasPermission(#entity, 'save')") <S extends T> S save(S s); 显然,自动连线bean不依赖于具有安全注释的DAO 如果我运行main方法

在这个问题背后,我想了解和调试Springbean是如何实例化的(以什么顺序)以及依赖关系是如何解析的

上下文 我正在使用:

  • 弹簧靴
  • 春季安全
  • spring数据JPA
我在DAO安全性注释中添加了如下内容:

@PreAuthorize("hasRole('ROLE_ADMIN') OR hasPermission(#entity, 'save')")
<S extends T> S save(S s);
显然,自动连线bean不依赖于具有安全注释的DAO

如果我运行main方法(使用springboot),不管它是编译的jar还是在我的IDE中,它都可以正常工作。但在某些情况下(例如junit测试),我会遇到以下异常:

java.lang.IllegalStateException: Cannot apply org.springframework.security.config.annotation.authentication.configurers.userdetails.DaoAuthenticationConfigurer@362b384c to already built object
我假设在Spring创建和配置我的安全配置之前,调用了AuthenticationManagerBuilder.build()方法。但是为什么呢?WebSecurityConfigureAdapter的顺序设置为100,应该在执行其他操作之前完成

问题: 我如何理解为什么Spring在配置之前创建其他bean(DAO和服务)?如何检查配置服务与服务/dao之间是否没有依赖关系?


谢谢,

将在实例化该配置类后立即调用
@Autowired
方法(该方法将由web容器启动时创建的安全筛选器触发)。这很早,但对于您的用例来说还不够早,因为您需要首先使用
AuthenticationManagerBuilder
。我建议您使用
globalaauthenticationconfigureradapter
(即一个新的bean),就像在Spring引导示例中一样(Spring Security将在更早的时候查找该类型的bean)。

这就行了!但是为什么WebSecurityConfigureAdapter是在GlobalAuthenticationConfigurerAdapter之后实例化的(有时是在一些基本服务之后)?Spring Security控制全局身份验证与web安全的顺序(我想是全局关注)。早期创建的任何其他内容通常是因为其他早期内容之一需要它(例如作为
@Autowired
依赖项)。好的。但是,如果它是一个依赖项,那么无论上下文如何(junit、depoyed等等),它都不会工作。事实上,它在某些情况下起作用。有没有办法让Spring显示它是如何计算依赖关系树的?我知道一些像intelliJ这样的工具可以做到这一点,但它没有向我显示不需要的依赖性。我想要的是真正的Spring树。你可以打开调试日志来查看创建的bean。顺序可能取决于环境(例如,嵌入式servlet容器强制提前创建过滤器)。
java.lang.IllegalStateException: Cannot apply org.springframework.security.config.annotation.authentication.configurers.userdetails.DaoAuthenticationConfigurer@362b384c to already built object