Sa-Token Actix-Web Plugin
这个包提供了 Sa-Token 与 Actix-Web 框架的集成。
简单使用方式
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
};
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<()> {
let sa_token_state = init_sa_token();
HttpServer::new(move || {
App::new()
.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> {
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": "测试用户"
}
})))
}
#[sa_check_role("admin")]
async fn admin_only(login_id: LoginId) -> Result<impl actix_web::Responder, actix_web::Error> {
Ok(web::Json(serde_json::json!({
"code": 200,
"data": {
"message": "只有管理员才能看到这条消息",
"user": login_id
}
})))
}
特性 (Features)
memory - 使用内存存储 (默认)
redis - 使用 Redis 存储
database - 使用数据库存储
full - 包含所有存储后端
直接引用方式
在你的项目中,只需要添加以下依赖即可使用 Sa-Token 与 Actix-Web 的集成:
[dependencies]
sa-token-plugin-actix-web = { version = "0.1.8", features = ["redis"] }
这个依赖会自动包含所有必要的 Sa-Token 组件,包括核心功能和存储实现。