npx skills add ...
npx skills add giuseppe-trisciuoglio/developer-kit --skill unit-test-security-authorization
Provides patterns for unit testing Spring Security with `@PreAuthorize`, `@Secured`, `@RolesAllowed`. Validates role-based access control and authorization policies. Use when testing security configurations and access control logic.
npx skills add giuseppe-trisciuoglio/developer-kit --skill unit-test-security-authorization
This skill provides patterns for unit testing Spring Security authorization logic using @PreAuthorize, @Secured, @RolesAllowed, and custom permission evaluators. It covers testing role-based access control (RBAC), expression-based authorization, custom permission evaluators, and verifying access denied scenarios without full Spring Security context.
Use this skill when:
@PreAuthorize and @Secured method-level securityFollow these steps to test Spring Security authorization:
Add spring-security-test to your test dependencies:
@WithMockUserIf tests pass unexpectedly, add this assertion to verify security is enforced:
| Annotation | Description | Example |
|---|---|---|
@PreAuthorize | Pre-invocation authorization | @PreAuthorize("hasRole('ADMIN')") |
@PostAuthorize | Post-invocation authorization | @PostAuthorize("returnObject.owner == authentication.name") |
@Secured | Simple role-based security | @Secured("ROLE_ADMIN") |
@RolesAllowed | JSR-250 standard | @RolesAllowed({"ADMIN", "MANAGER"}) |
@WithMockUser | Test annotation | @WithMockUser(roles = "ADMIN") |
@PreAuthorize TestValidation tip: If a security test passes unexpectedly, verify that
@EnableMethodSecurityis active on the test configuration — a missing annotation causes all@PreAuthorizechecks to be bypassed silently.
See references/basic-testing.md for more basic patterns and references/advanced-authorization.md for complex expressions and custom evaluators.
@WithMockUser for setting authenticated user context@EnableGlobalMethodSecurity in configuration for method-level security@PreAuthorize works via proxies; direct method calls bypass security@EnableGlobalMethodSecurity: Must be enabled for @PreAuthorize, @Secured to workhasRole('ADMIN') not hasRole('ROLE_ADMIN')@WithMockUser limitations: Creates a simple Authentication; complex auth scenarios need custom setup@PreAuthorize can be difficult to debug; test thoroughly@PreAuthorize, @Secured, MockMvc testing, and parameterized tests