sa_token_plugin_tide/
state.rs

1use std::sync::Arc;
2use sa_token_adapter::storage::SaStorage;
3use sa_token_core::{SaTokenManager, SaTokenConfig, StpUtil, SaTokenListener};
4
5/// 中文 | English
6/// Sa-Token 状态 | Sa-Token State
7/// 
8/// 包含 Sa-Token 管理器和配置 | Contains Sa-Token manager and configuration
9#[derive(Clone)]
10pub struct SaTokenState {
11    pub manager: Arc<SaTokenManager>,
12}
13
14impl SaTokenState {
15    /// 中文 | English
16    /// 从存储和配置创建状态 | Create state from storage and config
17    pub fn new(storage: Arc<dyn SaStorage>, config: SaTokenConfig) -> Self {
18        Self {
19            manager: Arc::new(SaTokenManager::new(storage, config)),
20        }
21    }
22    
23    /// 中文 | English
24    /// 从 SaTokenManager 创建状态 | Create state from SaTokenManager
25    pub fn from_manager(manager: SaTokenManager) -> Self {
26        // 自动初始化全局 StpUtil | Auto-initialize global StpUtil
27        StpUtil::init_manager(manager.clone());
28        
29        Self {
30            manager: Arc::new(manager),
31        }
32    }
33    
34    /// 中文 | English
35    /// 使用构建器模式创建状态 | Create state using builder pattern
36    pub fn builder() -> SaTokenStateBuilder {
37        SaTokenStateBuilder::default()
38    }
39}
40
41/// 中文 | English
42/// SaTokenState 构建器 | SaTokenState builder
43#[derive(Default)]
44pub struct SaTokenStateBuilder {
45    config_builder: sa_token_core::config::SaTokenConfigBuilder,
46    listeners: Vec<Arc<dyn SaTokenListener>>,
47}
48
49impl SaTokenStateBuilder {
50    /// 中文 | English
51    /// 创建新的构建器 | Create a new builder
52    pub fn new() -> Self {
53        Self::default()
54    }
55
56    /// 中文 | English
57    /// 设置 token 名称 | Set token name
58    pub fn token_name(mut self, name: impl Into<String>) -> Self {
59        self.config_builder = self.config_builder.token_name(name);
60        self
61    }
62    
63    /// 中文 | English
64    /// 设置 token 有效期(秒) | Set token timeout (seconds)
65    pub fn timeout(mut self, timeout: i64) -> Self {
66        self.config_builder = self.config_builder.timeout(timeout);
67        self
68    }
69    
70    /// 中文 | English
71    /// 设置 token 临时有效期(秒) | Set token active timeout (seconds)
72    pub fn active_timeout(mut self, timeout: i64) -> Self {
73        self.config_builder = self.config_builder.active_timeout(timeout);
74        self
75    }
76    
77    /// 中文 | English
78    /// 设置是否开启自动续签 | Set whether to enable auto renew
79    pub fn auto_renew(mut self, enabled: bool) -> Self {
80        self.config_builder = self.config_builder.auto_renew(enabled);
81        self
82    }
83    
84    /// 中文 | English
85    /// 设置是否允许并发登录 | Set whether to allow concurrent login
86    pub fn is_concurrent(mut self, concurrent: bool) -> Self {
87        self.config_builder = self.config_builder.is_concurrent(concurrent);
88        self
89    }
90    
91    /// 中文 | English
92    /// 设置是否共享 token | Set whether to share token
93    pub fn is_share(mut self, share: bool) -> Self {
94        self.config_builder = self.config_builder.is_share(share);
95        self
96    }
97    
98    /// 中文 | English
99    /// 设置 token 风格 | Set token style
100    pub fn token_style(mut self, style: sa_token_core::config::TokenStyle) -> Self {
101        self.config_builder = self.config_builder.token_style(style);
102        self
103    }
104    
105    /// 中文 | English
106    /// 设置 token 前缀 | Set token prefix
107    pub fn token_prefix(mut self, prefix: impl Into<String>) -> Self {
108        self.config_builder = self.config_builder.token_prefix(prefix);
109        self
110    }
111    
112    /// 中文 | English
113    /// 设置 JWT 密钥 | Set JWT secret key
114    pub fn jwt_secret_key(mut self, key: impl Into<String>) -> Self {
115        self.config_builder = self.config_builder.jwt_secret_key(key);
116        self
117    }
118    
119    /// 中文 | English
120    /// 设置存储实现 | Set storage implementation
121    pub fn storage(mut self, storage: Arc<dyn SaStorage>) -> Self {
122        self.config_builder = self.config_builder.storage(storage);
123        self
124    }
125    
126    /// 中文 | English
127    /// 添加事件监听器 | Add event listener
128    pub fn listener(mut self, listener: Arc<dyn SaTokenListener>) -> Self {
129        self.listeners.push(listener);
130        self
131    }
132    
133    /// 中文 | English
134    /// 添加多个事件监听器 | Add multiple event listeners
135    pub fn listeners(mut self, listeners: Vec<Arc<dyn SaTokenListener>>) -> Self {
136        self.listeners.extend(listeners);
137        self
138    }
139    
140    /// 中文 | English
141    /// 构建 SaTokenState | Build SaTokenState
142    pub fn build(self) -> SaTokenState {
143        // config_builder.build() 已经自动初始化了 StpUtil
144        // config_builder.build() already auto-initializes StpUtil
145        let manager = self.config_builder.build();
146        
147        // 注册事件监听器 | Register event listeners
148        for listener in self.listeners {
149            manager.event_bus().register(listener);
150        }
151        
152        // 直接创建 SaTokenState,不再调用 from_manager 避免重复初始化
153        // Create SaTokenState directly, don't call from_manager to avoid duplicate initialization
154        SaTokenState {
155            manager: Arc::new(manager),
156        }
157    }
158}