在当前的Spring Boot中,@EnableGlobalMethodSecurity
和GlobalMethodSecurityConfiguration
已被弃用,因此IntelliJ警告并手动推荐使用@EnableMethodSecurity
。
下面基于GlobalMethodSecurityConfiguration
的教程在这一点上工作得很好
- 如何在Spring security中创建自定义安全表达式方法
- 带有Spring安全的自定义安全表达式
并且,在阅读官方文档后,我尝试修改我的代码以使用@EnableMethodSecurity
:
- 方法安全性
它说明了下面的代码:
@Bean
static MethodSecurityExpressionHandler methodSecurityExpressionHandler() {
DefaultMethodSecurityExpressionHandler handler = new DefaultMethodSecurityExpressionHandler();
handler.setTrustResolver(myCustomTrustResolver);
return handler;
}
提示说:
我们使用
static
方法暴露MethodSecurityExpressionHandler
以确保Spring发布它在初始化Spring Security的方法安全@Configuration
类之前
但是,我需要在CustomMethodSecurityExpressionRoot
中注入存储库依赖bean。在static
方法中,autowired实例变量不能被访问。
我想使用PreAuthorize
与我的自定义方法,如"isUser", "isMember"使用我自己的存储库。当然,我可以用@EnableGlobalMethodSecurity
来解决我的问题,但是我想用正确的方式来写我的代码。
如果我正确理解了您的问题,您可以直接在bean方法中注入存储库,即使它是静态的:
@Bean
static MethodSecurityExpressionHandler methodSecurityExpressionHandler(MyRepository repository) {
// do something with repository
DefaultMethodSecurityExpressionHandler handler = new DefaultMethodSecurityExpressionHandler();
handler.setTrustResolver(myCustomTrustResolver);
return handler;
}