security - Grails Spring Security获得分配给方法的角色

标签 security grails functional-testing

我想进行一次测试,以测试 Controller 中可用的所有方法并检索与这些方法相关的角色。我知道这应该是功能测试(而不是单元测试),但是我仍然不知道如何请求与方法关联的角色列表。
假设我有这个 Controller :

@Secured("hasAnyRole('ROLE_1')"
class MyController {
    def methodA() {}

    @Secured("hasAnyRole('ROLE_2')"
    def methodB() {}
 }

在我的测试中,我想要这样的东西:
assertEquals(['ROLE_1'],getRoles(MyController.class, "methodA"))
assertEquals(['ROLE_1', 'ROLE_2'],getRoles(MyController.class, "methodB"))

有什么建议么?
谢谢。

最佳答案

您可以使用Reflection API做到这一点。就像是:

Method m = MyController.class.getMethod("methodB");
Annotation[] annos = m.getAnnotations();

但是我认为这不是对您的方法的良好验证,因为它只能确保您正确输入角色名称。我认为最好尝试调用该 Action 并检查该进程是否重定向到拒绝。
@TestFor(MyController)
class MyControllerTests {
  @Test
  void shouldRedirectToDenied() {
    SpringSecurityUtils.doWithAuth('username') {
      controller.methodB()
      assert controller.response.redirectedUrl == '/login/denied'
    }
  }
}
doWithAuth闭包将模拟用户名的身份验证,所以说的是相同的:“就像成功登录用户名一样执行此代码”。

看来您确实需要使用功能测试。参见伯特的评论。我仍然认为这不是一个有效的尝试,只是创建一个测试来验证该方法是否具有注释。

关于security - Grails Spring Security获得分配给方法的角色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15840355/

相关文章:

python - 如何通过 xmlrpc 安全地获得对 supervisord 的编程访问?

asp.net - 使用模型 View 演示者设计模式的安全性和角色授权

grails - 对WebSphere 7或8的Grails支持

grails - CAS登录后如何通过重定向对Grails 3应用进行功能测试?

linux - 现代 Unix/Linux 系统上的密码是否仍限制为 8 个字符?

asp.net - 从安全页面上的 asp.net 控件不安全地回发,同时避免身份验证

grails - Grails 3:更新域由于违反唯一约束而失败

grails - 无法在MVC结构中找到类文件-初学者

php - Behat是否可以根据当前环境使用不同的步骤数据?

java - 测试中在xml资源之前读取spring属性源