是否可以在ContainerRequestFilter
和资源中进行相同的交易?
目前,我有以下过滤器实现(简化):
@Provider
public class SecurityContextFilter implements ContainerRequestFilter {
@Inject UserDAO userDAO;
@Override
public void filter(ContainerRequestContext requestContext) {
Integer idUser = getIdUserFromToken(...);
User user = this.userDAO.getById(idUser);
// Create securityContext with principal = user
requestContext.setSecurityContext(...);
}
}
因此,在我的资源中,我能够注入SecurityContext
并提取我的本金,即登录的User
。
但是,该用户是分离的,因此我无权访问延迟加载的属性。在数据库日志中,我可以看到事务在过滤器的末尾提交,并且资源在新事务中执行。以我的理解,这意味着我的过滤器和资源中有一个不同的Hibernate会话。我现在拥有的解决方案是在我的资源中合并已登录的用户,这很烦人。
我没有任何自定义交易管理或与交易相关的注释。我在Wildfly 11中将JAX-RS与Hibernate一起使用。
有没有办法只对我的过滤器和资源进行一次交易?