文档添加API手册

This commit is contained in:
click33 2022-08-18 17:41:01 +08:00
parent a12058b18d
commit e846e80dce
6 changed files with 440 additions and 15 deletions

View File

@ -70,6 +70,14 @@
- [和 Dubbo 集成](/plugin/dubbo-extend)
- [Sa-Token 插件开发指南](/fun/plugin-dev)
- **API手册**
- [StpUtil-鉴权工具类](/api/stp-util)
- [SaSession-会话对象](/api/sa-session)
- [SaTokenDao-数据持久接口](/api/sa-token-dao)
- [SaStrategy-全局策略](/api/sa-strategy)
- [全局类、方法](/more/common-action)
- **其它**
- [更新日志](/more/update-log)
- [框架生态](/more/link)
@ -79,7 +87,6 @@
- [赞助 Sa-Token](/more/sa-token-donate)
- **附录**
- [常用类、方法](/more/common-action)
- [常见问题排查](/more/common-questions)
- [框架名词解释](/more/noun-intro)
- [Sa-Token功能结构图](/fun/auth-flow)

View File

@ -0,0 +1,77 @@
# SaSession-会话对象
SaSession-会话对象,专业数据缓存组件。
---
### 1、常量
``` java
SaSession.ROLE_LIST = "USER"; // 在 Session 上存储用户对象时建议使用的key
SaSession.ROLE_LIST = "ROLE_LIST"; // 在 Session 上存储角色时建议使用的key
SaSession.PERMISSION_LIST = "PERMISSION_LIST"; // 在 Session 上存储权限时建议使用的key
```
### 2、构建相关
``` java
session.getId(); // 获取此 Session 的 id
session.setId(id); // 写入此 Session 的 id
session.getCreateTime(); // 返回当前会话创建时间(时间戳)
session.setCreateTime(createTime); // 写入此 Session 的创建时间(时间戳)
```
### 3、TokenSign 相关
``` java
session.setTokenSignList(tokenSignList); // 写入此 Session 绑定的 Token 签名列表
session.getTokenSignList(); // 获取此 Session 绑定的 Token 签名列表
session.tokenSignListCopy(); // 获取 Token 签名列表 的拷贝副本
session.tokenSignListCopyByDevice(device); // 返回 Token 签名列表 的拷贝副本,根据 device 筛选
session.getTokenSign(tokenValue); // 查找一个 Token 签名
session.addTokenSign(tokenSign); // 添加一个 Token 签名
session.addTokenSign(tokenValue, device); // 添加一个 Token 签名
session.removeTokenSign(tokenValue); // 移除一个 Token 签名
```
### 4、一些操作
``` java
session.update(); // 更新Session从持久库更新刷新一下
session.logout(); // 注销Session (从持久库删除)
session.logoutByTokenSignCountToZero(); // 当Session上的tokenSign数量为零时注销会话
session.getTimeout(); // 获取此Session的剩余存活时间 (单位: 秒)
session.updateTimeout(timeout); // 修改此Session的剩余存活时间
session.updateMinTimeout(minTimeout); // 修改此Session的最小剩余存活时间 (只有在 Session 的过期时间低于指定的 minTimeout 时才会进行修改)
session.updateMaxTimeout(maxTimeout); // 修改此Session的最大剩余存活时间 (只有在 Session 的过期时间高于指定的 maxTimeout 时才会进行修改)
session.trans(value); // value为 -1 时返回 Long.MAX_VALUE否则原样返回
```
### 5、存取值
``` java
session.get(key); // 取值
session.get(key, defaultValue); // 取值 (指定默认值)
session.get(key, () -> {}); // 取值 (如果值为 null则执行 fun 函数获取值,并把函数返回值写入缓存)
session.getString(key); // 取值 (转String类型)
session.getInt(key); // 取值 (转int类型)
session.getLong(key); // 取值 (转long类型)
session.getDouble(key); // 取值 (转double类型)
session.getFloat(key); // 取值 (转float类型)
session.getModel(key, clazz); // 取值 (指定转换类型)
session.getModel(key, clazz, defaultValue); // 取值 (指定转换类型, 并指定值为Null时返回的默认值)
session.has(key); // 是否含有某个key
session.set(key, value); // 写值
session.setByNull(key, value); // 写值 (只有在此 key 原本无值的情况下才会写入)
session.delete(key); // 删值
session.keys(); // 返回当前Session的所有key
session.clear(); // 清空所有值
session.getDataMap(); // 获取数据挂载集合如果更新map里的值请调用session.update()方法避免产生脏数据
session.refreshDataMap(dataMap); // 写入数据集合 (不改变底层对象只将此dataMap所有数据进行替换)
```

View File

@ -0,0 +1,74 @@
# SaStrategy-全局策略
SaStrategy-全局策略,核心逻辑的代理封装。
---
### 所有策略
``` java
/**
* 创建 Token 的策略
* <p> 参数 [账号id, 账号类型]
*/
public BiFunction<Object, String, String> createToken = (loginId, loginType) -> {
// 默认还是uuid
return "xxxxx-xxxxx-xxxxx-xxxxx";
};
/**
* 创建 Session 的策略
* <p> 参数 [SessionId]
*/
public Function<String, SaSession> createSession = (sessionId) -> {
return new SaSession(sessionId);
};
/**
* 判断:集合中是否包含指定元素(模糊匹配)
* <p> 参数 [集合, 元素]
*/
public BiFunction<List<String>, String, Boolean> hasElement = (list, element) -> {
return false;
};
/**
* 对一个 [Method] 对象进行注解校验 (注解鉴权内部实现)
* <p> 参数 [Method句柄]
*/
public Consumer<Method> checkMethodAnnotation = (method) -> {
// ...
};
/**
* 对一个 [元素] 对象进行注解校验 (注解鉴权内部实现)
* <p> 参数 [element元素]
*/
public Consumer<AnnotatedElement> checkElementAnnotation = (target) -> {
// ...
};
/**
* 从元素上获取注解(注解鉴权内部实现)
* <p> 参数 [element元素要获取的注解类型]
*/
public BiFunction<AnnotatedElement, Class<? extends Annotation> , Annotation> getAnnotation = (element, annotationClass)->{
// 默认使用jdk的注解处理器
return element.getAnnotation(annotationClass);
};
/**
* 拼接两个url
* <p> 例如url1=http://domain.cnurl2=/sso/auth则返回http://domain.cn/sso/auth
* <p> 参数 [第一个url, 第二个url]
*/
public BiFunction<String, String, String> spliceTwoUrl = (url1, url2) -> {
return xxx;
};
```

View File

@ -0,0 +1,61 @@
# SaTokenDao-数据持久接口
SaTokenDao 是数据持久层接口,负责所有会话数据的底层写入和读取。
---
### 1、常量
``` java
SaTokenDao.NEVER_EXPIRE = -1; // 常量表示一个key永不过期 (在一个key被标注为永远不过期时返回此值)
SaTokenDao.NOT_VALUE_EXPIRE = -2; // 常量,表示系统中不存在这个缓存 (在对不存在的key获取剩余存活时间时返回此值)
```
### 2、字符串读写
``` java
dao.get(key); // 获取Value如无返空
dao.set(key, value, timeout); // 写入Value并设定存活时间 (单位: 秒)
dao.update(key, value); // 更新Value (过期时间不变)
dao.delete(key); // 删除Value
dao.getTimeout(key); // 获取Value的剩余存活时间 (单位: 秒)
dao.updateTimeout(key, timeout); // 修改Value的剩余存活时间 (单位: 秒)
```
### 3、对象读写
``` java
dao.getObject(key); // 获取Object如无返空
dao.setObject(key, value, timeout); // 写入Object并设定存活时间 (单位: 秒)
dao.setObject(key, value); // 更新Object (过期时间不变)
dao.deleteObject(key); // 删除Object
dao.getObjectTimeout(key); // 获取Object的剩余存活时间 (单位: 秒)
dao.updateObjectTimeout(key, timeout); // 修改Object的剩余存活时间 (单位: 秒)
```
### 4、Session读写
``` java
dao.getSession(sessionId); // 获取Session如无返空
dao.setSession(session, timeout); // 写入Session并设定存活时间 (单位: 秒)
dao.setSession(session); // 更新Session (过期时间不变)
dao.deleteSession(sessionId); // 删除Session
dao.getSessionTimeout(sessionId); // 获取Session的剩余存活时间 (单位: 秒)
dao.updateSessionTimeout(sessionId, timeout); // 修改Session的剩余存活时间 (单位: 秒)
```
### 5、会话管理
``` java
dao.searchData(prefix, keyword, start, size, sortType); // 搜索数据
```

View File

@ -0,0 +1,179 @@
# StpUtil - 鉴权工具类
StpUtil 是 Sa-Token 整体功能的核心,大多数功能均由此工具类提供。
---
### 1、常规操作
``` java
StpUtil.getStpLogic(); // 获取底层 StpLogic 对象。
StpUtil.setStpLogic(newStpLogic); // 安全的重置底层 StpLogic 引用。
StpUtil.getLoginType(); // 获取账号类型 例如login、user、admin、teacher、student等等
StpUtil.getTokenName(); // 获取 Token 的名称
StpUtil.getTokenValue(); // 获取本次请求前端提交的 Token。
StpUtil.getTokenValueNotCut(); // 获取本次请求前端提交的 Token (不裁剪前缀) 。
StpUtil.setTokenValue(tokenValue); // 在当前会话中写入 Token 值。
StpUtil.setTokenValue(tokenValue, timeout); // 在当前会话中写入 Token 值,并指定 Cookie 有效期。
StpUtil.getTokenInfo(); // 获取当前 Token 的详细参数。
```
### 2、登录相关
``` java
StpUtil.login(10001); // 会话登录
StpUtil.login(10001, "APP"); // 会话登录,并指定设备类型
StpUtil.login(10001, true); // 会话登录,并指定是否 [记住我]
StpUtil.login(10001, loginModel); // 会话登录并指定所有登录参数Model
StpUtil.createLoginSession(10001); // 创建指定账号id的登录会话此方法不会将 Token 注入到上下文
StpUtil.createLoginSession(10001, loginModel); // 创建指定账号id的登录会话此方法不会将 Token 注入到上下文
```
SaLoginModel 配置示例:
``` java
// SaLoginModel 配置登录相关参数
StpUtil.login(10001, new SaLoginModel()
.setDevice("PC") // 此次登录的客户端设备类型, 用于[同端互斥登录]时指定此次登录的设备类型
.setIsLastingCookie(true) // 是否为持久Cookie临时Cookie在浏览器关闭时会自动删除持久Cookie在重新打开后依然存在
.setTimeout(60 * 60 * 24 * 7) // 指定此次登录token的有效期, 单位:秒 (如未指定,自动取全局配置的 timeout 值)
.setToken("xxxx-xxxx-xxxx-xxxx") // 预定此次登录生成的Token
.setExtra("name", "zhangsan") // Token挂载的扩展参数 此方法只有在集成jwt插件时才会生效
);
```
### 3、注销相关
``` java
StpUtil.logout(); // 会话注销
StpUtil.logout(10001); // 会话注销根据账号id
StpUtil.logout(10001, "PC"); // 会话注销根据账号id 和 设备类型
StpUtil.logoutByTokenValue(token); // 指定 Token 强制注销
StpUtil.kickout(10001); // 踢人下线
StpUtil.kickout(10001, "PC"); // 踢人下线根据账号id
StpUtil.kickoutByTokenValue(token); // 踢人下线根据账号id 和 设备类型
```
### 4、会话查询
``` java
StpUtil.isLogin(); // 当前会话是否已经登录
StpUtil.checkLogin(); // 检验当前会话是否已经登录,如未登录,则抛出异常
StpUtil.getLoginId(); // 获取当前会话账号id, 如果未登录,则抛出异常
StpUtil.getLoginId(defaultValue); // 获取当前会话账号id, 如果未登录,则返回默认值
StpUtil.getLoginIdDefaultNull(); // 获取当前会话账号id, 如果未登录则返回null
StpUtil.getLoginIdAsString(); // 获取当前会话账号id, 并转换为String类型
StpUtil.getLoginIdAsInt(); // 获取当前会话账号id, 并转换为int类型
StpUtil.getLoginIdAsLong(); // 获取当前会话账号id, 并转换为long类型
StpUtil.getLoginIdByToken(token); // 获取指定Token对应的账号id如果未登录则返回 null
StpUtil.getExtra(key); // 获取当前 Token 的扩展信息此函数只在jwt模式下生效
StpUtil.getExtra(token, key); // 获取指定 Token 的扩展信息此函数只在jwt模式下生效
```
### 5、Session 相关
``` java
// User-Session 相关
StpUtil.getSession(); // 获取当前会话的Session如果Session尚未创建则新建并返回
StpUtil.getSession(true); // 获取当前会话的Session, 如果Session尚未创建isCreate=是否新建并返回
StpUtil.getSessionByLoginId(10001); // 获取指定账号id的Session如果Session尚未创建则新建并返回
StpUtil.getSessionByLoginId(10001, true); // 获取指定账号id的Session, 如果Session尚未创建isCreate=是否新建并返回
// Token-Session 相关
StpUtil.getTokenSession(); // 获取当前会话的Session如果Session尚未创建则新建并返回
StpUtil.getTokenSessionByToken(token); // 获取指定Token-Session如果Session尚未创建则新建并返回
StpUtil.getAnonTokenSession(); // 获取当前匿名 Token-Session 可在未登录情况下使用的Token-Session
// 其它
StpUtil.getSessionBySessionId("xxxx-xxxx-xxxx"); // 获取指定key的Session, 如果Session尚未创建则返回 null
```
### 6、Token有效期相关
``` java
// 临时有效期
StpUtil.getTokenActivityTimeout(); // 获取当前 token [临时过期] 剩余有效时间 (单位: 秒)
StpUtil.checkActivityTimeout(); // 检查当前token 是否已经[临时过期],如果已经过期则抛出异常
StpUtil.updateLastActivityToNow(); // 续签当前token(将 [最后操作时间] 更新为当前时间戳)
// 长久有效期
StpUtil.getTokenTimeout(); // 获取当前登录者的 token 剩余有效时间 (单位: 秒)
StpUtil.getSessionTimeout(); // 获取当前登录者的 User-Session 剩余有效时间 (单位: 秒)
StpUtil.getTokenSessionTimeout(); // 获取当前 Token-Session 剩余有效时间 (单位: 秒)
StpUtil.renewTimeout(timeout); // 对当前 Token 的 timeout 值进行续期
StpUtil.renewTimeout(token, timeout); // 对指定 Token 的 timeout 值进行续期
```
### 7、角色认证
``` java
StpUtil.getRoleList(); // 获取:当前账号的角色集合
StpUtil.getRoleList(10001); // 获取:指定账号的角色集合
StpUtil.hasRole(role); // 判断:当前账号是否拥有指定角色, 返回true或false
StpUtil.hasRole(loginId, role); // 判断:指定账号是否含有指定角色标识, 返回true或false
StpUtil.hasRoleAnd(...roleArray); // 判断:当前账号是否含有指定角色标识 [指定多个,必须全部验证通过]
StpUtil.hasRoleOr(...roleArray); // 判断:当前账号是否含有指定角色标识 [指定多个,只要其一验证通过即可]
StpUtil.checkRole(role); // 校验:当前账号是否含有指定角色标识, 如果验证未通过,则抛出异常: NotRoleException
StpUtil.checkRoleAnd(...roleArray); // 校验:当前账号是否含有指定角色标识 [指定多个,必须全部验证通过]
StpUtil.checkRoleOr(...roleArray); // 校验:当前账号是否含有指定角色标识 [指定多个,只要其一验证通过即可]
```
### 8、权限认证
``` java
StpUtil.getPermissionList(); // 获取:当前账号的权限集合
StpUtil.getPermissionList(10001); // 获取:指定账号的权限集合
StpUtil.hasPermission(permission); // 判断:当前账号是否拥有指定权限, 返回true或false
StpUtil.hasPermission(loginId, permission); // 判断:指定账号是否含有指定权限标识, 返回true或false
StpUtil.hasPermissionAnd(...permissionArray); // 判断:当前账号是否含有指定权限标识 [指定多个,必须全部验证通过]
StpUtil.hasPermissionOr(...permissionArray); // 判断:当前账号是否含有指定权限标识 [指定多个,只要其一验证通过即可]
StpUtil.checkPermission(permission); // 校验:当前账号是否含有指定权限标识, 如果验证未通过,则抛出异常: NotRoleException
StpUtil.checkPermissionAnd(...permissionArray); // 校验:当前账号是否含有指定权限标识 [指定多个,必须全部验证通过]
StpUtil.checkPermissionOr(...permissionArray); // 校验:当前账号是否含有指定权限标识 [指定多个,只要其一验证通过即可]
```
### 9、id 反查 Token
``` java
StpUtil.getTokenValueByLoginId(10001); // 获取指定账号id的tokenValue
StpUtil.getTokenValueByLoginId(10001, "PC"); // 获取指定账号id指定设备类型端的tokenValue
StpUtil.getTokenValueListByLoginId(10001); // 获取指定账号id的tokenValue集合
StpUtil.getTokenValueListByLoginId(10001, "APP"); // 获取指定账号id指定设备类型端的tokenValue 集合
StpUtil.getLoginDevice(); // 返回当前会话的登录设备类型
```
### 10、会话管理
``` java
StpUtil.searchTokenValue(keyword, start, size, sortType); // 根据条件查询Token
StpUtil.searchSessionId(keyword, start, size, sortType); // 根据条件查询SessionId
StpUtil.searchTokenSessionId(keyword, start, size, sortType); // 根据条件查询Token专属Session的Id
```
详细可参考:[会话治理](/up/search-session)
### 11、账号封禁
``` java
StpUtil.disable(10001, 1200); // 封禁指定账号
StpUtil.disable(10001); // 指定账号是否已被封禁 (true=已被封禁, false=未被封禁)
StpUtil.getDisableTime(10001); // 获取指定账号剩余封禁时间,单位:秒(-1=永久封禁,-2=未被封禁)
StpUtil.untieDisable(loginId); // 解封指定账号
```
### 12、身份切换
``` java
StpUtil.switchTo(10044); // 临时切换身份为指定账号id
StpUtil.endSwitch(); // 结束临时切换身份
StpUtil.isSwitch(); // 当前是否正处于[身份临时切换]中
StpUtil.switchTo(10044, () -> {}); // 在一个代码段里方法内临时切换身份为指定账号id
```
### 13、二级认证
``` java
StpUtil.openSafe(safeTime); // 在当前会话 开启二级认证
StpUtil.isSafe(); // 当前会话 是否处于二级认证时间内
StpUtil.checkSafe(); // 检查当前会话是否已通过二级认证,如未通过则抛出异常
StpUtil.getSafeTime(); // 获取当前会话的二级认证剩余有效时间 (单位: 秒, 返回-2代表尚未通过二级认证)
StpUtil.closeSafe(); // 在当前会话 结束二级认证
```

View File

@ -1,28 +1,34 @@
# 常用类、方法
本篇介绍Sa-Token中一些常用的全局对象、类
# 全局类、方法
本篇介绍 Sa-Token 中一些常用的全局对象、类
---
### SaManager
SaManager 负责管理 Sa-Token 所有运行时对象
SaManager 负责管理 Sa-Token 所有全局组件。
``` java
SaManager.getConfig(); // 获取全局配置对象
SaManager.getSaTokenDao(); // 获取数据持久化对象
SaManager.getStpInterface(); // 获取权限认证对象
SaManager.getSaTokenAction(); // 获取框架行为对象
SaManager.getSaTokenContext(); // 获取上下文处理对象
SaManager.getSaTokenListener(); // 获取侦听器对象
SaManager.getSaTemp(); // 获取临时令牌认证模块对象
SaManager.getStpLogic("type"); // 获取指定账号类型的StpLogic对象
SaManager.getConfig(); // 获取全局配置对象
SaManager.getSaTokenDao(); // 获取数据持久化对象
SaManager.getStpInterface(); // 获取权限认证对象
SaManager.getSaTokenContext(); // 获取一级Context处理对象
SaManager.getSaTokenSecondContext(); // 获取二级Context处理对象
SaManager.getSaTokenContextOrSecond(); // 获取一个可用的 Context 处理对象
SaManager.getSaTokenListener(); // 获取侦听器对象
SaManager.getSaTemp(); // 获取临时令牌认证模块对象
SaManager.getSaJsonTemplate(); // 获取 JSON 转换器 Bean
SaManager.getSaSignTemplate(); // 获取参数签名 Bean
SaManager.getStpLogic("type"); // 获取指定账号类型的StpLogic对象
SaManager.putStpLogic(stpLogic); // 向全局集合中 put 一个 StpLogic
```
### SaHolder
Sa-Token上下文持有类通过此类快速获取当前环境的相关对象
``` java
SaHolder.getContext(); // 获取当前请求的 SaTokenContext
SaHolder.getRequest(); // 获取当前请求的 [Request] 对象
SaHolder.getResponse(); // 获取当前请求的 [Response] 对象
SaHolder.getStorage(); // 获取当前请求的 [存储器] 对象
SaHolder.getStorage(); // 获取当前请求的 [Storage] 对象
SaHolder.getApplication(); // 获取全局 SaApplication 对象
```
@ -36,14 +42,34 @@ Sa-Token内部工具类包含一些工具方法
SaFoxUtil.printSaToken(); // 打印 Sa-Token 版本字符画
SaFoxUtil.getRandomString(8); // 生成指定长度的随机字符串
SaFoxUtil.isEmpty(str); // 指定字符串是否为null或者空字符串
SaFoxUtil.isNotEmpty(str); // 指定字符串是否不是null或者空字符串
SaFoxUtil.equals(a, b); // 比较两个对象是否相等
SaFoxUtil.equals(a, b); // 比较两个对象是否相等
SaFoxUtil.getMarking28(); // 以当前时间戳和随机int数字拼接一个随机字符串
SaFoxUtil.formatDate(date); // 将日期格式化为yyyy-MM-dd HH:mm:ss字符串
SaFoxUtil.searchList(); // 从集合里查询数据
SaFoxUtil.searchList(dataList, prefix, keyword, start, size, sortType); // 从集合里查询数据
SaFoxUtil.searchList(dataList, start, size, sortType); // 从集合里查询数据
SaFoxUtil.vagueMatch(patt, str); // 字符串模糊匹配
SaFoxUtil.getValueByType(obj, cs); // 将指定值转化为指定类型
SaFoxUtil.joinParam(url, parameStr); // 在url上拼接上kv参数并返回
SaFoxUtil.joinParam(url, key, value); // 在url上拼接上kv参数并返回
SaFoxUtil.joinSharpParam(url, parameStr); // 在url上拼接锚参数
SaFoxUtil.joinSharpParam(url, key, value); // 在url上拼接锚参数
SaFoxUtil.arrayJoin(arr); // 将数组的所有元素使用逗号拼接在一起
SaFoxUtil.isUrl(str); // 使用正则表达式判断一个字符串是否为URL
SaFoxUtil.encodeUrl(str); // URL编码
SaFoxUtil.decoderUrl(str); // URL解码
SaFoxUtil.convertStringToList(str); // 将指定字符串按照逗号分隔符转化为字符串集合
SaFoxUtil.convertListToString(list); // 将指定集合按照逗号连接成一个字符串
SaFoxUtil.convertStringToArray(str); // String 转 Array按照逗号切割
SaFoxUtil.convertArrayToString(arr); // Array 转 String按照逗号切割
SaFoxUtil.emptyList(); // 返回一个空集合
SaFoxUtil.toList(... strs); // String 数组转集合
```
### SaTokenConfigFactory
配置对象工厂类通过此类你可以方便的根据properties配置文件创建一个配置对象
配置对象工厂类,通过此类你可以方便的根据 properties 配置文件创建一个配置对象
1、首先在项目根目录创建一个配置文件`sa-token.properties`
@ -80,6 +106,7 @@ SpringMVC操作的工具类位于包`sa-token-spring-boot-starter`
``` java
SpringMVCUtil.getRequest(); // 获取本次请求的 request 对象
SpringMVCUtil.getResponse(); // 获取本次请求的 response 对象
SpringMVCUtil.isWeb(); // 判断当前是否处于 Web 上下文中
```