【问题标题】: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”权限?

【问题讨论】:

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


    【解决方案1】:

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

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

    此类组件的单元测试可以使用注入安全方法的组件模拟来创建组件,并模拟抛出AccessDeniedException。然后检查异常处理是否正确。

    【讨论】:

    • 我使用的是 JUnit 4,如果在单元测试期间它没有返回 AccessDeniedException 但在现实世界中它确实返回了,那么配置单元测试时缺少什么?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-12
    • 2010-09-07
    • 1970-01-01
    • 2018-10-17
    • 2016-06-05
    • 2011-06-06
    • 2010-09-27
    相关资源
    最近更新 更多