假设我有类似以下的方法:
@PreAuthorize("hasPermission(#obj, 'READ')")
public void requiresReadPermission(Object obj) {}
是否有一种简单的方法可以模拟/授予/拒绝身份验证的“READ”权限?
答案 0 :(得分:0)
由于它是方法的单元测试,而不是给定拦截器的单元测试,因此您无需担心身份验证和ACL基础结构。如果要测试在未授予用户访问权限时抛出AccessDeniedException
,则单元测试拦截器本身。在您的情况下,只测试您的方法执行/返回预期执行/返回的操作。
如果未授予身份验证访问给定对象的权限,则Spring Security ACL方法拦截器将抛出AccessDeniedException
,如上所述,它将在AccessDeniedHandler
或直接调用方法的catch块中处理或间接的担保方法。如果这是您的情况,则根据您的安全方法,组件有责任正确处理异常。
这样一个组件的单元测试可以创建组件,模拟组件并注入安全方法并模拟抛出AccessDeniedException
。然后检查是否正确处理了异常。