Spring security 具有事务性的集成测试

Spring security 具有事务性的集成测试,spring-security,spring-data-jpa,spring-test,Spring Security,Spring Data Jpa,Spring Test,我有以下场景/系统。 一个Rest服务方案,在Spring安全配置后面,带有Spring JPA和postgres DB 现在,我的场景产生了一个 用户1的登录名 用户1的注销 用户1的登录名 对资源发出请求 用户1的注销 用户2的登录名 对其他资源发出请求 用户2的注销 这一切都取决于测试方法(我知道这样做可能是错误的)。 现在让我困惑的是,他有一些加密/解密方法来检索用户,它们是字段。现在我看到的是,在用户1的第一次登录中,用户通过解密代码(这是可以的),在用户1的第二次登录中,我们没有通过

我有以下场景/系统。 一个Rest服务方案,在Spring安全配置后面,带有Spring JPA和postgres DB

现在,我的场景产生了一个
用户1的登录名
用户1的注销
用户1的登录名
对资源发出请求
用户1的注销
用户2的登录名
对其他资源发出请求
用户2的注销

这一切都取决于测试方法(我知道这样做可能是错误的)。 现在让我困惑的是,他有一些加密/解密方法来检索用户,它们是字段。现在我看到的是,在用户1的第一次登录中,用户通过解密代码(这是可以的),在用户1的第二次登录中,我们没有通过解密代码(但用户已登录)。(这有点奇怪,我希望用户通过解密代码),然后通过访问资源,用户2也被解密(这是正确的)。 但是通过登录用户2,用户不会传递解密代码(我有一个异常,因为通常的字段是加密的,现在是解密的)。异常可以是正常的,但不是字段被解密的事实

现在,只有在@Transactional下设置测试时才会引发异常。 当我将测试设置为非@Transactional时,行为也会正确(每次登录时都会对用户进行解密。)
现在我想:“测试不是@transactional是合乎逻辑的”,但我有点担心我有一个缓存问题:这可能是吗?我没有任何缓存配置(仅用于ACL,不用于用户管理)。 同时,hibernate的二级缓存也被关闭

是否有办法确定某些缓存或内存强度是否为intrcate


Txs

在没有看到您的实际代码和配置的情况下,我无法真正准确地评估发生了什么;但是,我可以向您提供以下一般信息

如果您正在模拟一个用例,该用例模拟到您的应用程序的不同外部连接(即,两个独立用户通过REST API连接到您的应用程序),那么您将不希望使用
@Transactional
注释您的测试方法

使用
@Transactional
注释测试方法会导致测试方法中的所有方法调用在同一事务中执行[0]。因此,JPA存储在一级缓存中的任何项都将在测试方法的范围内跨方法调用进行缓存

希望这有帮助

萨姆


[0]此语句基于这样的假设,即您的测试方法直接或间接调用的任何方法都没有配置为在新事务中运行。

Txs for your's feedback。你给了我一点保证,我所做的是朝着正确的方向。Txs:)