sa_token_plugin_rocket/
lib.rs

1// Author: 金书记
2//
3//! # sa-token-plugin-rocket
4//! 
5//! Rocket框架集成插件
6
7pub mod middleware;
8pub mod extractor;
9pub mod adapter;
10
11pub use middleware::SaTokenFairing;
12pub use extractor::{SaTokenGuard, OptionalSaTokenGuard, LoginIdGuard};
13pub use adapter::{RocketRequestAdapter, RocketResponseAdapter};
14
15use std::sync::Arc;
16use sa_token_core::{SaTokenManager, SaTokenConfig};
17use sa_token_adapter::storage::SaStorage;
18
19/// Rocket 应用状态
20#[derive(Clone)]
21pub struct SaTokenState {
22    pub manager: Arc<SaTokenManager>,
23}
24
25impl SaTokenState {
26    /// 创建状态构建器
27    pub fn builder() -> SaTokenStateBuilder {
28        SaTokenStateBuilder::new()
29    }
30}
31
32/// 状态构建器
33pub struct SaTokenStateBuilder {
34    storage: Option<Arc<dyn SaStorage>>,
35    token_name: Option<String>,
36    timeout: Option<i64>,
37    active_timeout: Option<i64>,
38}
39
40impl SaTokenStateBuilder {
41    pub fn new() -> Self {
42        Self {
43            storage: None,
44            token_name: None,
45            timeout: None,
46            active_timeout: None,
47        }
48    }
49    
50    pub fn storage(mut self, storage: Arc<dyn SaStorage>) -> Self {
51        self.storage = Some(storage);
52        self
53    }
54    
55    pub fn token_name(mut self, name: impl Into<String>) -> Self {
56        self.token_name = Some(name.into());
57        self
58    }
59    
60    pub fn timeout(mut self, timeout: i64) -> Self {
61        self.timeout = Some(timeout);
62        self
63    }
64    
65    pub fn active_timeout(mut self, timeout: i64) -> Self {
66        self.active_timeout = Some(timeout);
67        self
68    }
69    
70    pub fn build(self) -> SaTokenState {
71        let storage = self.storage
72            .expect("Storage is required");
73        
74        let mut config = SaTokenConfig::default();
75        if let Some(name) = self.token_name {
76            config.token_name = name;
77        }
78        if let Some(timeout) = self.timeout {
79            config.timeout = timeout;
80        }
81        if let Some(active_timeout) = self.active_timeout {
82            config.active_timeout = active_timeout;
83        }
84        
85        let manager = SaTokenManager::new(storage, config);
86        
87        // 自动初始化全局 StpUtil
88        sa_token_core::StpUtil::init_manager(manager.clone());
89        
90        SaTokenState {
91            manager: Arc::new(manager),
92        }
93    }
94}
95
96impl Default for SaTokenStateBuilder {
97    fn default() -> Self {
98        Self::new()
99    }
100}