用途:为 Spring Security 的方法级授权逻辑提供单元测试模式,覆盖 @PreAuthorize、@Secured、@RolesAllowed 和自定义权限评估器,验证基于角色的访问控制(RBAC)、表达式授权以及拒绝访问场景,且无需启动完整 Spring Security 上下文。
主要能力:测试方法级安全注解;测试 RBAC;测试自定义权限评估器;验证访问被拒场景;测试带认证主体的授权;支持 @WithMockUser、@WithUserDetails 等测试注解;支持参数化测试与 MockMvc 测试。
使用方式:在测试依赖中加入 spring-security-test(Maven 坐标 org.springframework.security:spring-security-test,scope 为 test);在测试配置类上使用 @EnableMethodSecurity 启用方法安全;用 @WithMockUser(roles = "ADMIN") 等注解设置认证用户,对允许场景断言不抛异常,对拒绝场景断言抛出 AccessDeniedException;自定义权限评估器可直接构造 Authentication 与领域对象调用 hasPermission 断言结果。
适用场景:需要快速验证授权规则、同时覆盖允许与拒绝分支、测试表达式授权与自定义评估器、以及验证安全配置确实生效的 Spring 项目。
限制与注意:方法安全依赖代理,直接方法调用会绕过安全;必须启用 @EnableMethodSecurity(或 @EnableGlobalMethodSecurity)否则 @PreAuthorize 会被静默跳过;Spring 自动添加 ROLE_ 前缀,应写 hasRole('ADMIN') 而非 hasRole('ROLE_ADMIN');安全上下文为线程本地,异步测试需谨慎;@WithMockUser 只创建简单 Authentication,复杂认证需自定义设置;复杂 SpEL 难以调试;方法安全有性能开销。更多模式见 references/setup.md、basic-testing.md、advanced-authorization.md、complete-examples.md。