Spring Hibernate - 无法获取当前线程

时间:2015-06-25 19:41:13

标签: java spring security spring-mvc transactional

为什么我发布这个?

经过几个小时的搜索/分析/变得偏执,我想与你分享我的错 - 我找到了解决问题的原因。

什么时候发生?

  • 在应用程序服务器中(在我的情况下是嵌入式tomcat) - 测试没有问题
  • 在两个特定的@Services上,使用@Transactional
  • 正确地注释了这些方法

什么不是问题?

  • @Configuration
  • 中缺少@EnableTransactionManagement
  • 一些人遇到了AOP问题,例如在没有实现接口的服务中没有默认构造函数(AFAIK自Spring 4.0以来这个问题不再存在)

问题是什么?

我正在使用CustomPermisionEvaluator进行安全性,例如用于保护这样的方法:

@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忽略的那两个@Services。

TL;博士

不要将bean自动装配到GlobalMethodSecurityConfiguration =&gt;之后他们不会被正确截获。

0 个答案:

没有答案