我想在此类中使用该存储库,但是当我放置类似@Component的构造型时,会从IDE中收到错误消息:
无法自动接线。找不到“身份验证”类型的Bean。
public class CustomMethodSecurityExpressionRoot extends SecurityExpressionRoot implements MethodSecurityExpressionOperations {
@Autowired
private FlatRepository flatRepository;
public CustomMethodSecurityExpressionRoot(Authentication authentication) {
super(authentication);
}
}
答案 0 :(得分:2)
您不能在@Autowire
内SecurityExpressionRoot
。
但是,您可以手动提供该FlatRepository
依赖项。
在@Configuration
类中配置安全性对象时,可以@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);
答案 1 :(得分:0)
要使用Bean的自动装配实例,您需要使用该实例的组件/服务也由Spring进行管理。因此,为了使用存储库,您需要对CustomMethodSecurityExpressionRoot类进行扩展。您可以使用@Component / @Service注释对类进行注释,然后通过组件扫描对其进行选择,或者使用Java或XML配置对bean进行配置。
如果“ Springify” CustomMethodSecurityExpressionRoot,那么您需要确保Authentication对象可以通过spring Application上下文获得。这就是为什么您收到无法找到身份验证的错误的原因。您还需要使用Java或XML创建一个Authentication类型的Bean。
请查看官方文档以了解如何定义spring bean: