springboot-security
Spring Security best practices for authn/authz, validation, CSRF, secrets, headers, rate limiting, and dependency security in Java Spring Boot services. Use when reviewing Spring Security authn/authz, validation, CSRF, secrets, headers, or rate limiting.
By affaan-m · 3,018 installs
npx skills add affaan-m/ecc --skill springboot-security
Source repository · Upstream listing
Spring Boot Security Review
Use when adding auth, handling input, creating endpoints, or dealing with secrets.
When to Activate
Adding authentication (JWT, OAuth2, session based)
Implementing authorization (@PreAuthorize, role based access)
Validating user input (Bean Validation, custom validators)
Configuring CORS, CSRF, or security headers
Managing secrets (Vault, environment variables)
Adding rate limiting or brute force protection
Scanning dependencies for CVEs
Authentication
Prefer stateless JWT or opaque tokens with revocation list
Use httpOnly , Secure , SameSite=Strict cookies for sessions
Validate tokens with OncePerRequestFilter or resource server
Authorization
Enable method security: @EnableMethodSecurity
Use @PreAuthorize("hasRole('ADMIN')") or @PreAuthorize("@authz.canEdit( id)")
Deny by default; expose only required scopes
Input Validation
Use Bean Validation with @Valid on controllers
Apply constraints on DTOs: @NotBlank , @Email , @Size , custom validators
Sanitize any HTML with a whitelist before rendering
SQL Injection Prevention
Use Spring Data repositories or parameterized queries
For native queries, use :param bindings; never concatenate strings
Password Encoding
Always hash passwords with BCrypt or Argon2 — never store plaintext
Use PasswordEncoder bean, not manual hashing
CSRF Protection
For browser session apps, keep CSRF enabled; include token in forms/headers
For pure APIs with Bearer tokens, disable CSRF and rely on stateless auth
Secrets Management
No secrets in source; load from env or vault
Keep application.yml free of credentials; use placeholders
Rotate tokens and DB credentials regularly
Security Headers
CORS Configuration
Configure CORS at the security filter level, not per controller
Restrict allowed origins — never use in production
Rate Limiting
Apply Bucket4j or gateway level limits on expensive endpoints
Log and alert on bursts; return 429 with retry hints
Dependency Security
Run OWASP Dependency Check / Snyk in CI
Keep Spring Boot and Spring Security on supported versions
Fail builds on known CVEs
Logging and PII
Never log secrets, tokens, passwords, or full PAN data
Redact sensitive fields; use structured JSON logging
File Uploads
Validate size, content type, and extension
Store outside web root; scan if required
Checklist Before Release
[ ] Auth tokens validated and expired correctly
[ ] Authorization guards on every sensitive path
[ ] All inputs validated and sanitized
[ ] No string concatenated SQL
[ ] CSRF posture correct for app type
[ ] Secrets externalized; none committed
[ ] Security headers configured
[ ] Rate limiting on APIs
[ ] Dependencies scanned and up to date
[ ] Logs free of sensitive data
Remember : Deny by default, validate inputs, least privilege, and secure by configuration first.