sa_token_plugin_actix_web/
lib.rs1pub mod middleware;
8pub mod extractor;
9pub mod adapter;
10
11pub use middleware::{SaTokenMiddleware, SaCheckLoginMiddleware};
12pub use extractor::{SaTokenExtractor, OptionalSaTokenExtractor, LoginIdExtractor};
13pub use adapter::{ActixRequestAdapter, ActixResponseAdapter};
14
15use std::sync::Arc;
16use actix_web::web::Data;
17use sa_token_core::{SaTokenManager, SaTokenConfig};
18use sa_token_adapter::storage::SaStorage;
19
20pub type SaTokenData = Data<SaTokenState>;
22
23#[derive(Clone)]
25pub struct SaTokenState {
26 pub manager: Arc<SaTokenManager>,
27}
28
29impl SaTokenState {
30 pub fn builder() -> SaTokenStateBuilder {
32 SaTokenStateBuilder::new()
33 }
34}
35
36pub struct SaTokenStateBuilder {
38 storage: Option<Arc<dyn SaStorage>>,
39 token_name: Option<String>,
40 timeout: Option<i64>,
41 active_timeout: Option<i64>,
42}
43
44impl SaTokenStateBuilder {
45 pub fn new() -> Self {
46 Self {
47 storage: None,
48 token_name: None,
49 timeout: None,
50 active_timeout: None,
51 }
52 }
53
54 pub fn storage(mut self, storage: Arc<dyn SaStorage>) -> Self {
55 self.storage = Some(storage);
56 self
57 }
58
59 pub fn token_name(mut self, name: impl Into<String>) -> Self {
60 self.token_name = Some(name.into());
61 self
62 }
63
64 pub fn timeout(mut self, timeout: i64) -> Self {
65 self.timeout = Some(timeout);
66 self
67 }
68
69 pub fn active_timeout(mut self, timeout: i64) -> Self {
70 self.active_timeout = Some(timeout);
71 self
72 }
73
74 pub fn build(self) -> Data<SaTokenState> {
75 let storage = self.storage
76 .expect("Storage is required");
77
78 let mut config = SaTokenConfig::default();
79 if let Some(name) = self.token_name {
80 config.token_name = name;
81 }
82 if let Some(timeout) = self.timeout {
83 config.timeout = timeout;
84 }
85 if let Some(active_timeout) = self.active_timeout {
86 config.active_timeout = active_timeout;
87 }
88
89 let manager = SaTokenManager::new(storage, config);
90
91 sa_token_core::StpUtil::init_manager(manager.clone());
93
94 Data::new(SaTokenState {
95 manager: Arc::new(manager),
96 })
97 }
98}
99
100impl Default for SaTokenStateBuilder {
101 fn default() -> Self {
102 Self::new()
103 }
104}