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