在Spring中,静态方法需要调用自动连接的存储库来保证方法的安全性



在当前的Spring Boot中,@EnableGlobalMethodSecurityGlobalMethodSecurityConfiguration已被弃用,因此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;
}

相关内容

  • 没有找到相关文章

最新更新