spring-sa-token is an automatic assembly for sa-token-rust.
Dependencies
# Default: memory storage (for development)
= { = "<version>" }
# Production: reuse spring-redis connection (recommended)
= { = "<version>", = false, = ["with-spring-redis", "with-web"] }
Optional features:
memory: In-memory storage (default, for development/testing)with-spring-redis: Use spring-redis connection pool for storage (recommended)with-web: Enable axum web integration (middleware, extractors)
Configuration items
For detailed documentation and configuration, see sa-token-rust docs
[]
# Token name (key in header or cookie)
= "Authorization"
# Token timeout in seconds, -1 means permanent
# Default: 2592000 (30 days)
= 86400
# Token active timeout in seconds, -1 means no limit
# If no requests within this time, token becomes invalid
= 3600
# Enable auto renew - automatically refresh token on each request
= true
# Allow concurrent login for same account
= true
# Share token when multiple logins for same account
= true
# Token style: Uuid, SimpleUuid, Random32, Random64, Random128, Jwt
= "Uuid"
# Token prefix (e.g., "Bearer ")
= "Bearer "
# JWT configuration (only when token_style = "Jwt")
= "your-secret-key"
= "HS256" # HS256, HS384, HS512
= "my-app"
= "my-users"
# Enable nonce for replay attack prevention
= false
= 300
# Enable refresh token
= false
= 604800 # 7 days
Quick Start
1. Add plugins to your application
use ;
use RedisPlugin;
use ;
use ;
async
2. Configure path-based authentication
sa_token_auth() supports two configuration approaches:
Approach 1: Using SecurityConfig (Recommended)
Create src/security.rs:
use ;
;
Then use it in main.rs:
.sa_token_auth
Approach 2: Using PathAuthBuilder directly
You can also configure directly in main.rs without a separate config file:
use PathAuthBuilder;
async
Path matching rules:
**matches any multi-level path, e.g.,/api/**matches/api/users,/api/users/123, etc.*matches single-level path, e.g.,/api/*only matches/api/users, not/api/users/123- Exact match, e.g.,
/loginonly matches/login
3. Implement login endpoint
use StpUtil;
use ;
async
4. Access protected routes
use LoginIdExtractor;
use ;
async
Procedural Macros
spring-sa-token provides several procedural macros for declarative security:
#[sa_check_login]
Verify user is logged in:
async
#[sa_check_role("role")]
Verify user has specific role:
async
#[sa_check_roles_and("role1", "role2")]
Verify user has ALL specified roles:
async
#[sa_check_roles_or("role1", "role2")]
Verify user has ANY of the specified roles:
async
#[sa_check_permission("permission")]
Verify user has specific permission:
async
#[sa_check_permissions_and("perm1", "perm2")]
Verify user has ALL specified permissions:
async
#[sa_check_permissions_or("perm1", "perm2")]
Verify user has ANY of the specified permissions:
async
#[sa_ignore]
Skip authentication for specific endpoint (even if path matches include rules):
async
StpUtil API
The StpUtil struct provides static methods for token operations:
Login/Logout
// Login and get token
let token = login.await?;
// Logout current token
logout.await?;
// Logout by login ID (invalidate all tokens)
logout_by_login_id.await?;
// Check if user is logged in
let is_login = is_login_by_login_id.await;
Token Operations
// Get token by login ID
let token = get_token_by_login_id.await;
// Get login ID by token
let login_id = get_login_id_by_token.await;
Roles and Permissions
// Set roles
set_roles.await?;
// Get roles
let roles = get_roles.await;
// Check role
let has_role = has_role.await;
// Set permissions
set_permissions.await?;
// Get permissions
let permissions = get_permissions.await;
// Check permission
let has_perm = has_permission.await;
Extractors
LoginIdExtractor
Extract current user's login ID from request:
use LoginIdExtractor;
async
OptionalSaTokenExtractor
Extract token info optionally (returns None if not authenticated):
use OptionalSaTokenExtractor;
async
SaTokenExtractor
Extract full token info (fails if not authenticated):
use SaTokenExtractor;
async
Component Access
Access SaTokenState component for advanced operations:
use SaTokenState;
use Component;
async
Error Handling
All security macros return spring_web::error::WebError on failure, which can be handled by your error handling middleware:
use Result;
async
Complete code reference sa-token-example