解决MySql布尔型新旧版本兼容问题,采用枚举来表示布尔型的数据表。由正向工程赋值
大石头 authored at 2018-05-15 21:21:05
3.09 KiB
X
# 令牌HTTP过滤器TokenHttpFilter ## 概述 `TokenHttpFilter` 是用于 HTTP API 客户端的身份认证过滤器,实现了 `IHttpFilter` 接口。它自动在请求头中注入令牌,并在收到 401/403 响应时自动尝试刷新或重新获取令牌,实现透明的身份认证。 **命名空间**:`NewLife.Http` **文档地址**:https://newlifex.com/core/token_http_filter ## 核心特性 - **自动注入**:在 `HttpClient` 请求前自动添加 `Authorization` 头 - **自动续期**:拦截 `401 Unauthorized` 和 `403 Forbidden` 响应,自动刷新令牌 - **安全密钥**:支持 RSA 加密用户密码,保护通信链路中的敏感信息 - **多用户支持**:可配置 `UserName`/`Password` 或自定义 `IToken` ## 快速开始 ```csharp using NewLife.Http; using NewLife.Remoting; // 创建令牌过滤器 var filter = new TokenHttpFilter { UserName = "admin", Password = "123456", // 安全密钥(可选),用于 RSA 加密密码 SecurityKey = "myKey$myPublicKeyValue", // 申请令牌的动作名,默认 OAuth/Token Action = "OAuth/Token", }; // 与 ApiHttpClient 配合使用 var client = new ApiHttpClient("http://localhost:5000"); client.Filter = filter; // 首次调用会自动获取令牌,后续自动注入 var data = await client.GetAsync<Object>("user/info"); ``` ## 工作原理 ``` 请求 ──→ TokenHttpFilter ── 检查令牌 ──→ 有令牌? ──是──→ 注入 Authorization 头 │ │ 否 │ ↓ ↓ 申请新令牌 ←───────────────────────────────── HttpClient │ │ ↓ ↓ 缓存令牌 发送请求 │ 响应 401/403? │ 是 ↓ 清空令牌 → 重试 ``` ## API 参考 ### 属性 | 属性 | 类型 | 说明 | |------|------|------| | `UserName` | `String?` | 用户名 | | `Password` | `String?` | 密码 | | `SecurityKey` | `String?` | 安全密钥,格式 `keyName$keyValue`,用于 RSA 加密密码 | | `Action` | `String` | 申请令牌的动作名,默认 `OAuth/Token` | | `Token` | `IToken?` | 当前令牌信息 | | `Expire` | `DateTime` | 令牌过期时间 | | `ErrorCodes` | `IList<Int32>` | 触发令牌清空的状态码,默认 401 和 403 | ## 注意事项 - `TokenHttpFilter` 是线程安全的,内部使用锁定保证并发安全 - 令牌刷新采用"第一次请求刷新"策略,避免多线程同时刷新 - `SecurityKey` 中的密钥名称会传递给服务端,便于多密钥轮换