我想在这个类中使用该存储库,但是当我放置像@Component这样的构造型时,我从IDE中得到一个错误:
无法自动装配。找不到“身份验证”类型的bean。
public class CustomMethodSecurityExpressionRoot extends SecurityExpressionRoot implements MethodSecurityExpressionOperations {
@Autowired
private FlatRepository flatRepository;
public CustomMethodSecurityExpressionRoot(Authentication authentication) {
super(authentication);
}
}
你不能在@Autowire
内SecurityExpressionRoot
。
但是,您可以手动提供FlatRepository
依赖项。
当您在@Configuration
类中配置Security对象时,您可以在@Autowire
中使用所需的任何实例。
只需在CustomMethodSecurityExpressionRoot
构造函数中为新的依赖项创建空间
class CustomMethodSecurityExpressionRoot extends SecurityExpressionRoot
implements MethodSecurityExpressionOperations {
private final FlatRepository flatRepository;
CustomMethodSecurityExpressionRoot(
final Authentication authentication,
final FlatRepository flatRepository) {
super(authentication);
this.flatRepository = flatRepository;
}
...
}
并在实例化点手动注入它
final SecurityExpressionRoot root = new CustomMethodSecurityExpressionRoot(authentication, flatRepository);
要使用bean的Autowired实例,您需要使用该实例的组件/服务也由Spring管理。因此,为了使用存储库,您需要弹出CustomMethodSecurityExpressionRoot类。您可以使用@Component / @Service批注对类进行批注,然后使用组件扫描进行选择,或使用Java或XML配置来配置bean。
如果“弹出”CustomMethodSecurityExpressionRoot,则需要确保spring对象上下文可以获取Authentication对象。这就是您收到无法找到身份验证的错误的原因。您还需要使用Java或XML创建Authentication类型的bean。
请查看官方文档,了解如何定义spring bean:
https://docs.spring.io/spring-javaconfig/docs/1.0.0.M4/reference/html/ch02s02.html