使用Spring Security ACL注释注释单元测试方法的最佳方法是什么?

时间:2013-10-10 17:34:49

标签: spring spring-security spring-test spring-security-acl

假设我有类似以下的方法:

@PreAuthorize("hasPermission(#obj, 'READ')")
public void requiresReadPermission(Object obj) {}

是否有一种简单的方法可以模拟/授予/拒绝身份验证的“READ”权限?

1 个答案:

答案 0 :(得分:0)

由于它是方法的单元测试,而不是给定拦截器的单元测试,因此您无需担心身份验证和ACL基础结构。如果要测试在未授予用户访问权限时抛出AccessDeniedException,则单元测试拦截器本身。在您的情况下,只测试您的方法执行/返回预期执行/返回的操作。

如果未授予身份验证访问给定对象的权限,则Spring Security ACL方法拦截器将抛出AccessDeniedException,如上所述,它将在AccessDeniedHandler或直接调用方法的catch块中处理或间接的担保方法。如果这是您的情况,则根据您的安全方法,组件有责任正确处理异常。

这样一个组件的单元测试可以创建组件,模拟组件并注入安全方法并模拟抛出AccessDeniedException。然后检查是否正确处理了异常。