外观
Authentication 重点文件与方法
重点覆盖身份适配、请求内缓存、登录信息读写和认证扩展。用户接口与权限模型的装配前提见使用与配置,业务角色数据来源见权限与状态扩展。
本页按重点文件查阅方法;表内方法名可打开源码。重载共享的约束写在表前,差异在各行说明。源码链接固定到核对版本,接入前提见快速开始。
ParentGetUtil
源码:ParentGetUtil。
将 ParentAuthenticationLoginUser 接到 Base 的 SessionUserProvider。构造器依赖父认证实现和 SecurityProperty,交给 Spring 注入;不要在业务方法里手动创建第二个实例。
| 方法 / 重载 | 用途、参数与返回值 | 注意事项 |
|---|---|---|
| ParentGetUtil(ParentAuthenticationLoginUser parentAuthenticationLoginUser, SecurityProperty securityProperty) | 保存身份来源与安全配置。 | 两个依赖需有效,构造器本身不验证登录。 |
| init() | @PostConstruct 将当前实例放入静态 INSTANCE。 | 生命周期入口,不是刷新用户状态的方法;多容器会共享静态值。 |
| loginUser() | 委托父认证层获取当前身份。 | 实际凭证解析由 AuthenticationLoginUser 完成。 |
| permissionUser() | 委托父认证层获取当前权限身份。 | 不独立查询角色数据库。 |
| loginUser(Long userId) | 委托指定用户的身份列表查询。 | 不会切换当前会话。 |
| permissionUser(Long userId) | 委托指定用户的权限身份列表查询。 | 此入口自身没有目标用户访问校验。 |
| isLoginVerification() | 返回 SecurityProperty.loginVerification。 | 此配置默认 false,与 SessionUserProvider 接口默认 true 不同。 |
ParentAuthenticationDefaultCacheLoginUser
源码:ParentAuthenticationDefaultCacheLoginUser。
默认请求内身份缓存。缓存保存在当前 request attribute,不是 Store,也不是 Token 生命周期缓存。同一请求中身份数据变化后不会自动刷新已命中对象。
| 方法 / 重载 | 用途、参数与返回值 | 注意事项 |
|---|---|---|
| ParentAuthenticationDefaultCacheLoginUser(AuthenticationLoginUser authenticationLoginUser, HttpServletRequest request) | 绑定身份解析器和请求对象。 | 由自动配置构造,依赖有效 Servlet 请求。 |
| loginUser() | 优先返回请求缓存,未命中委托真实解析器。非 null 结果缓存。 | 解析为 null 时返回 DefaultLoginUser.DEFAULT,但不缓存该默认值;后续读取可能再次解析。 |
| permissionUser(BaseLoginUser loginUser) | 委托权限解析并缓存,空结果返回 DefaultPermissionUser.DEFAULT。 | 缓存键不含 userId;同一请求先后传不同用户仍可能取第一次的结果。 |
| loginUser(Long userId) | 通过 BaseUtil 委托指定用户列表查询。 | 不走上述请求缓存;真实解析器返回 null 时 BaseUtil 抛业务异常,空列表则原样返回。 |
| permissionUser(Long userId) | 委托指定用户权限列表查询。 | 不缓存到当前用户的 request key。 |
LoginInfoUtil
源码:LoginInfoUtil。
为登录类型、账号和验证码提供三个独立 request attribute 槽位。构造器接收 HttpServletRequest;只在当前请求内交换数据,不写 Cookie、Token 或会话数据库。
| 方法 / 重载 | 用途、参数与返回值 | 注意事项 |
|---|---|---|
| LoginInfoUtil(HttpServletRequest request) | 创建基于该请求的访问门面。 | 通常注入 Bean,不保存到后台任务跨请求使用。 |
| type() | 返回登录类型的 LoginInfoFunction。 | 本身不读取类型,也不验证是否属于已支持登录方式。 |
| account() | 返回账号槽位访问器。 | 不查询账号是否存在。 |
| code() | 返回验证码槽位访问器。 | 不发送、比较或一次性消费验证码。 |
LoginInfoFunction
每次访问绑定 request 和 key。此类的 get/set 操作的是 String,不具备加密或校验行为。
| 方法 / 重载 | 用途、参数与返回值 | 注意事项 |
|---|---|---|
| LoginInfoFunction(HttpServletRequest request, String key) | 绑定请求属性名。 | 直接构造时 key 冲突会覆盖其他属性,优先通过 LoginInfoUtil 获得。 |
| set(String content) | 写入 request attribute,返回 void。 | 不清理其他槽位;Servlet 对 null 的属性语义由请求实现处理。 |
| get() | 读取并强制转为 String,未设置时 null。 | 如果其他代码同 key 写入非字符串,会发生类型转换异常。 |
已注入 LoginInfoUtil loginInfo 的认证方法中可以这样交换本次请求信息;这些值需由实际登录流程继续验证:
java
loginInfo.type().set("password");
loginInfo.account().set("demo-account");
String account = loginInfo.account().get(); // demo-accountUserUtil
源码:UserUtil。
直接读取请求凭证并委托指定解析函数,不自动验签或去除 Bearer 前缀。
| 方法 / 重载 | 用途、参数与返回值 | 注意事项 |
|---|---|---|
| UserUtil(HttpServletRequest request) | 保存请求引用。 | 通常由 Spring 注入。 |
| getLoginUser(String token, GetLoginUserFunction function) | token 为 null 抛“token信息异常”,否则调用 function.get(token) 并返回 BaseLoginUser。 | 空串不被此方法拒绝;凭证有效性、过期和用户状态由回调负责。 |
| getAuthToken(String space, String key) | space 为 cookie/header/parameter 时读取相应位置的值。无请求上下文或值缺失返回 null。 | space 区分字面值,null/其他值抛“token获取位置异常”;返回原始值。 |
嵌套函数接口 UserUtil.GetLoginUserFunction.get(String token) 由应用实现,输入原始 Token、输出 BaseLoginUser。它不提供默认实现;私有的 Cookie/Header/Parameter 读取方法仅负责选取位置。
PermissionCacheService
保存权限变更版本,供业务决定何时刷新角色权限。记录内容是 UTC 时钟的毫秒字符串,没有 TTL;只写版本,不主动清除请求内身份缓存。
| 方法 / 重载 | 用途、参数与返回值 | 注意事项 |
|---|---|---|
| PermissionCacheService(StoreTemplate<String> store) | 使用系统 UTC 时钟构造。 | 自动配置使用隔离的权限命名空间,不要与任意业务缓存混用。 |
| setGlobalTimestamp() | 覆盖全局版本,用于菜单、角色等影响全部用户的变更。 | 毫秒内多次调用可能相同,不是严格单调序列。 |
| getGlobalTimestamp() | 读取全局版本字符串,未写入时 null。 | 本地 Store 的版本仅在本进程有效。 |
| setUserRoleTimestamp(Long userId) | 覆盖指定用户角色版本。 | userId 必须 >0,否则 IllegalArgumentException;不会删除权限记录。 |
| getUserRoleTimestamp(Long userId) | 返回指定用户版本,未设置为 null。 | 同样要求 userId >0。 |
RoleHook
源码:RoleHook。
由业务提供角色和模块操作名;继承 BaseSequenceHook.sequence(),默认顺序为 0。注册 Bean 后仍需调用方汇总,接口自身不执行权限拦截。
| 方法 / 重载 | 用途、参数与返回值 | 注意事项 |
|---|---|---|
| listRoleName(BaseLoginUser loginUser) | 返回该身份可用的角色名称集合。 | 根据可信 userId/client 限定范围;返回空集合表达没有角色,避免 null。 |
| listOperationByModule(BaseLoginUser loginUser, String module) | 返回身份在指定模块的操作标识集合。 | module 是权限模块标识;需要过滤禁用角色、禁用菜单,不能仅凭绑定记录判定有效。 |
UserDetailHook
源码:UserDetailHook。
给用户详情响应增加一项自定义信息;继承 sequence() 决定扩展排序。
| 方法 / 重载 | 用途、参数与返回值 | 注意事项 |
|---|---|---|
| detail(BaseLoginUser loginUser) | 返回业务详情对象。 | 只包含可公开的字段,避免返回 Token 或数据库内部对象。 |
| detailKey() | 返回详情对象在响应中的键名。 | 使用稳定且唯一的业务键;重名如何处理由实际调用方决定。 |
LoginOperationHook
定义登录前后的扩展点;此接口没有顺序契约,也不自行触发。具体登录业务负责何时调用。
| 方法 / 重载 | 用途、参数与返回值 | 注意事项 |
|---|---|---|
| before() | 登录前处理,返回 void。 | 若实现抛异常是否中断登录取决于调用链,不应假设异常被隔离。 |
| after() | 登录后的处理,返回 void。 | 不能据名字推断数据库事务已经提交。 |
LoginSecurityHook
检查特定客户端的登录风险。此组件提供接口,调用和拒绝逻辑由登录业务编排。
| 方法 / 重载 | 用途、参数与返回值 | 注意事项 |
|---|---|---|
| check(String client, Long userId, ConstantAccount.UserTypeEnum userType, HttpServletRequest request) | 接收客户端、用户 ID/类型与请求,返回 LoginSecurityHookEntity。 | 回调应按实际主体检查,返回对象不等价于自动拒绝登录,需看编排方如何处理。 |
| client() | 返回适用客户端数组,默认 null。 | 默认 null 的覆盖范围由调用方解释,不在接口层自动匹配全部客户端。 |
UserStatusHook
源码:UserStatusHook。
状态清理 SPI;实现 clear 后由 UserStatusSpringHook 或业务入口显式触发。
| 方法 / 重载 | 用途、参数与返回值 | 注意事项 |
|---|---|---|
| clear(BaseLoginUser loginUser) | 清理该身份关联的应用状态,返回 void。 | 不默认删除 Token/权限版本,需由实现明确清理范围。 |
UserStatusSpringHook
构造器接收已注入的 Hook 列表;按列表实际顺序同步执行,不自动按 BaseSequenceHook 排序。
| 方法 / 重载 | 用途、参数与返回值 | 注意事项 |
|---|---|---|
| UserStatusSpringHook(List<UserStatusHook> userStatusHookList) | 保存清理器列表并记录注册日志。 | 列表及元素应非 null。 |
| clear(BaseLoginUser loginUser) | 逐个调用所有清理器的 clear。 | 任一抛异常会终止后续执行;无重试、事务或异常隔离。 |