使用 Spring Security ACL 注释对方法进行单元测试的最佳方法是啥?
Posted
技术标签:
【中文标题】使用 Spring Security ACL 注释对方法进行单元测试的最佳方法是啥?【英文标题】:What is the best way to unit test methods annotated with Spring Security ACL annotations?使用 Spring Security ACL 注释对方法进行单元测试的最佳方法是什么? 【发布时间】:2013-10-18 14:37:51 【问题描述】:假设我有如下方法:
@PreAuthorize("hasPermission(#obj, 'READ')")
public void requiresReadPermission(Object obj)
是否有一种简单的方法可以模拟/授予/拒绝身份验证的“READ”权限?
【问题讨论】:
【参考方案1】:由于它是方法的单元测试,而不是给定拦截器的单元测试,因此您无需担心身份验证和 ACL 基础结构。如果您想测试在未授予用户访问对象时抛出AccessDeniedException
,请对拦截器本身进行单元测试。在您的情况下,只需测试您的方法是否执行/返回预期执行/返回的操作。
如果身份验证未授予对给定对象的访问权限,Spring Security ACL 方法拦截器将抛出 AccessDeniedException
如上所述,并在 AccessDeniedHandler
或直接或间接调用受保护的方法的 catch 块中进行处理方法。如果这是您的情况,则组件有责任根据您的安全方法正确处理异常。
此类组件的单元测试可以使用注入安全方法的组件模拟来创建组件,并模拟抛出AccessDeniedException
。然后检查异常处理是否正确。
【讨论】:
我使用的是 JUnit 4,如果在单元测试期间它没有返回AccessDeniedException
但在现实世界中它确实返回了,那么配置单元测试时缺少什么?以上是关于使用 Spring Security ACL 注释对方法进行单元测试的最佳方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章