我为什么要发布这个?
经过几个小时的搜索/分析/变得偏执后,我想与您分享我的错误 - 我确定了问题的原因。
什么时候发生的?
- 在应用程序服务器内(在我的例子中嵌入了tomcat) - 测试没有问题
- 在两个特定的 @Services 上,方法已使用 @Transactional 正确注释
什么不是问题?
- @Configuration 中缺少@EnableTransactionManagement
- 一些奇怪的 AOP 问题,例如,在未实现接口的服务中没有默认构造函数(据我所知,自 Spring 4.0 以来,这个问题不再存在)
问题出在哪里?
我正在使用 CustomPermissionEvaluator 来实现安全性,例如用于保护如下方法:
@RequestMapping(value = "/{name}", method = RequestMethod.GET)
@PreAuthorize("hasPermission(null, 'SERVICE.ASSOCIATION.FIND_BY_NAME')")
public ResponseEntity<AssociationResult> findByName(@PathVariable String name) {
//do stuff
}
为此,我必须扩展 GlobalMethodSecurityConfiguration 以使我的 CustomPermissionEvaluator 投入使用。在那里,我使用 @Autowiring 来访问权限评估所需的 bean。你猜怎么着——这就是 TransactionInterceptor 忽略的 2 个 @Services。
tl;dr
不要将 bean 自动装配到 GlobalMethodSecurityConfiguration => 之后它们将不会被正确拦截。
None
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)