有没有办法绕过Spring Security中的所有安全检查?

时间:2014-03-18 19:09:22

标签: spring spring-security

我来自PHP世界。我最常用的框架是Symfony,它主要基于Spring的想法。如果其名为JMSSecurityExtraBundle的捆绑包支持可以通过configuration激活的角色ROLE_IDDQD。使用该角色进行身份验证将有效地绕过所有安全检查 - 直接对域层中的类方法进行Web安全约束或约束。

由于安全相关的测试需要具有特定角色的用户进行身份验证,因此我将以编程方式创建身份验证对象并将其传递给安全上下文。这样我就可以直接在域代码上测试安全约束,而不会涉及任何UI。

由于许多域方法都是安全的,因此它会阻止我为某些测试设置fixture,因为当前经过身份验证的用户没有足够的权限来执行此操作。这是我开始使用ROLE_IDDQD的地方 - 我创建了一个方法,该方法可以在域层中绕过任何安全约束来执行任何操作:

$user = $this->iddqd(function () {
    return $this->userManager->save($this->aUser());
});

该方法将记住当前的身份验证,使用ROLE_IDDQD重新进行身份验证,执行传入的函数,然后恢复记住的身份验证。

我正在将应用程序迁移到Spring并寻找一种方法来对Spring做同样的事情。我找不到ROLE_IDDQD的任何提及,所以我猜这部分不是基于Spring Security。有没有其他方法可以复制此功能?

2 个答案:

答案 0 :(得分:0)

Spring安全性具有匿名用户的概念,具有自动分配的角色" ROLE_ANONYMOUS"。您可以查找更多信息here

答案 1 :(得分:0)

我很久以前就解决了这个问题。这是我如何做到的。

在我的架构中,我通常有一个存储库层,它抽象出数据库访问,并在存储库层上方执行一个强制域逻辑的管理器层。

问题在于我的测试方法。我试图使用管理器来设置测试数据。我现在直接使用存储库来执行此操作,并且不需要像IDDQD角色那样的黑客等。

所以,基本上,我使用存储库用测试数据填充数据库,然后命中管理器来测试其中的域逻辑。