【发布时间】:2018-05-13 02:07:36
【问题描述】:
我来自 PHP 世界。我使用最多的框架是 Symfony,它很大程度上基于 Spring 的思想。如果其名为 JMSSecurityExtraBundle 的捆绑包支持角色ROLE_IDDQD,您可以通过configuration 激活该角色。使用该角色进行身份验证将有效地绕过所有安全检查——无论是那些 Web 安全约束或直接对域层中类的方法的约束。
由于与安全相关的测试需要对具有特定角色的用户进行身份验证,因此我将以编程方式创建身份验证对象并将其传递给安全上下文来对用户进行身份验证。这样我就可以直接在域代码上测试安全约束,而不涉及任何 UI。
由于很多域方法都是安全的,它会阻止我为某些测试设置固定装置,因为当前经过身份验证的用户没有足够的权限来执行此操作。这就是我开始使用ROLE_IDDQD 的地方——我创建了一个方法,该方法将采用一个可以绕过任何安全约束在域层中执行任何操作的函数:
$user = $this->iddqd(function () {
return $this->userManager->save($this->aUser());
});
该方法会记住当前的认证,用ROLE_IDDQD重新认证,执行传入的函数,然后恢复记住的认证。
我正在将应用程序迁移到 Spring 并寻找一种方法来使用 Spring 做同样的事情。我找不到任何提及ROLE_IDDQD,所以我猜这部分不是基于 Spring Security。还有其他方法可以复制此功能吗?
【问题讨论】: