| Crates.io | sa-token-plugin-actix-web |
| lib.rs | sa-token-plugin-actix-web |
| version | 0.1.12 |
| created_at | 2025-10-11 02:43:45.72079+00 |
| updated_at | 2025-12-17 04:49:11.652875+00 |
| description | Actix-web framework integration for sa-token-rust - All-in-one package |
| homepage | https://github.com/llc-993/sa-token-rust |
| repository | https://github.com/llc-993/sa-token-rust |
| max_upload_size | |
| id | 1877775 |
| size | 85,253 |
这个包提供了 Sa-Token 与 Actix-Web 框架的集成。
// 在你的 Cargo.toml 中添加依赖
// sa-token-plugin-actix-web = { version = "0.1.12", features = ["redis"] }
use actix_web::{web, App, HttpServer};
use sa_token_plugin_actix_web::{
SaTokenMiddleware, SaTokenState, TokenValue, LoginId,
sa_check_login, sa_check_permission, sa_check_role
};
// 初始化 Sa-Token 配置
fn init_sa_token() -> SaTokenState {
SaTokenState::builder()
.token_name("my-token")
.timeout(7200)
.activity_timeout(1800)
.build()
}
// 使用中间件保护路由
#[actix_web::main]
async fn main() -> std::io::Result<()> {
// 初始化 Sa-Token
let sa_token_state = init_sa_token();
HttpServer::new(move || {
App::new()
// 注册 Sa-Token 中间件
.app_data(web::Data::new(sa_token_state.clone()))
.wrap(SaTokenMiddleware::new(sa_token_state.clone()))
.service(
web::scope("/api")
.route("/login", web::post().to(login))
.route("/user_info", web::get().to(user_info))
.route("/admin_only", web::get().to(admin_only))
)
})
.bind("127.0.0.1:8080")?
.run()
.await
}
// 登录接口
async fn login(state: web::Data<SaTokenState>) -> impl actix_web::Responder {
// 登录逻辑
let login_id = "user123";
sa_token_core::StpUtil::login(login_id).await;
web::Json(serde_json::json!({
"code": 200,
"message": "登录成功",
"token": sa_token_core::StpUtil::get_token_value().await
}))
}
// 需要登录才能访问的接口
#[sa_check_login]
async fn user_info(token: TokenValue) -> Result<impl actix_web::Responder, actix_web::Error> {
// token 参数会自动从请求中提取
// login_id 也可以通过 LoginId 提取器获取
let login_id = sa_token_core::StpUtil::get_login_id_by_token(&token).await;
Ok(web::Json(serde_json::json!({
"code": 200,
"data": {
"user_id": login_id,
"username": "测试用户"
}
})))
}
// 需要 admin 角色才能访问的接口
#[sa_check_role("admin")]
async fn admin_only(login_id: LoginId) -> Result<impl actix_web::Responder, actix_web::Error> {
// login_id 参数会自动从请求中提取
Ok(web::Json(serde_json::json!({
"code": 200,
"data": {
"message": "只有管理员才能看到这条消息",
"user": login_id
}
})))
}
memory - 使用内存存储 (默认)redis - 使用 Redis 存储database - 使用数据库存储full - 包含所有存储后端在你的项目中,只需要添加以下依赖即可使用 Sa-Token 与 Actix-Web 的集成:
[dependencies]
sa-token-plugin-actix-web = { version = "0.1.12", features = ["redis"] }
这个依赖会自动包含所有必要的 Sa-Token 组件,包括核心功能和存储实现。