重构代码:jwt模式login添加扩展信息

This commit is contained in:
click33
2021-12-23 19:20:56 +08:00
parent f9f10477eb
commit d4d4bd129d
8 changed files with 156 additions and 205 deletions

View File

@@ -1,12 +1,13 @@
package cn.dev33.satoken.stp;
import java.util.LinkedHashMap;
import java.util.Map;
import cn.dev33.satoken.SaManager;
import cn.dev33.satoken.config.SaTokenConfig;
import cn.dev33.satoken.dao.SaTokenDao;
import cn.dev33.satoken.util.SaTokenConsts;
import java.util.Map;
/**
* 调用 `StpUtil.login()` 时的 [配置参数 Model ]
* @author kong
@@ -30,9 +31,9 @@ public class SaLoginModel {
public Long timeout;
/**
* jwt扩展信息
* 扩展信息只在jwt模式下生效
*/
public Map<String, Object> expandInfoMap;
public Map<String, Object> extraData;
/**
@@ -84,21 +85,47 @@ public class SaLoginModel {
}
/**
* @return 参考 {@link #expandInfoMap}
* @return 参考 {@link #extraData}
*/
public Map<String, Object> getExpandInfoMap() {
return expandInfoMap;
public Map<String, Object> getExtraData() {
return extraData;
}
/**
* @param expandInfoMap 参考 {@link #expandInfoMap}
* @param extraData 参考 {@link #extraData}
* @return 对象自身
*/
public SaLoginModel setExpandInfoMap(Map<String, Object> expandInfoMap) {
this.expandInfoMap = expandInfoMap;
public SaLoginModel setExtraData(Map<String, Object> extraData) {
this.extraData = extraData;
return this;
}
/**
* 写入扩展数据只在jwt模式下生效
* @param key 键
* @param value 值
* @return
*/
public SaLoginModel setExtra(String key, Object value) {
if(this.extraData == null) {
this.extraData = new LinkedHashMap<>();
}
this.extraData.put(key, value);
return this;
}
/**
* 获取扩展数据只在jwt模式下生效
* @param key 键
* @return 扩展数据的值
*/
public Object getExtra(String key) {
if(this.extraData == null) {
return null;
}
return this.extraData.get(key);
}
/**
* @return Cookie时长
*/

View File

@@ -16,6 +16,7 @@ import cn.dev33.satoken.context.model.SaCookie;
import cn.dev33.satoken.context.model.SaRequest;
import cn.dev33.satoken.context.model.SaStorage;
import cn.dev33.satoken.dao.SaTokenDao;
import cn.dev33.satoken.exception.ApiDisabledException;
import cn.dev33.satoken.exception.DisableLoginException;
import cn.dev33.satoken.exception.NotLoginException;
import cn.dev33.satoken.exception.NotPermissionException;
@@ -80,26 +81,15 @@ public class StpLogic {
return splicingKeyTokenName();
}
/**
* 创建一个TokenValue
* @param loginId loginId
* @param device 设备标识
* @param timeout 过期时间
* @return 生成的tokenValue
*/
public String createTokenValue(Object loginId, String device, long timeout) {
return SaStrategy.me.createToken.apply(loginId, loginType);
}
/**
* 创建一个TokenValue
* @param loginId loginId
* @param device 设备标识
* @param expandInfoMap 扩展信息
* @param timeout 过期时间
* @param extraData 扩展信息
* @return 生成的tokenValue
*/
public String createTokenValue(Object loginId, String device, Map<String, Object> expandInfoMap, long timeout) {
public String createTokenValue(Object loginId, String device, long timeout, Map<String, Object> extraData) {
return SaStrategy.me.createToken.apply(loginId, loginType);
}
@@ -269,15 +259,6 @@ public class StpLogic {
login(id, new SaLoginModel().setDevice(device));
}
/**
* 会话登录,并指定扩展信息 for Jwt
* @param id 账号id建议的类型long | int | String
* @param expandInfoMap 扩展数据
*/
public void login(Object id, Map<String, Object> expandInfoMap) {
login(id, new SaLoginModel().setExpandInfoMap(expandInfoMap));
}
/**
* 会话登录,并指定是否 [记住我]
* @param id 账号id建议的类型long | int | String
@@ -319,7 +300,7 @@ public class StpLogic {
}
// 如果至此仍未成功创建tokenValue, 则开始生成一个
if(tokenValue == null) {
tokenValue = createTokenValue(id, loginModel.getDeviceOrDefault(), loginModel.getExpandInfoMap(), loginModel.getTimeout());
tokenValue = createTokenValue(id, loginModel.getDeviceOrDefault(), loginModel.getTimeout(), loginModel.getExtraData());
}
// ------ 3. 获取 User-Session , 续期
@@ -678,18 +659,6 @@ public class StpLogic {
return getLoginIdNotHandle(tokenValue);
}
/**
* 获取指定Token对应的扩展信息如果未登录则返回 null
* @param tokenValue token
* @return 账号id
*/
public Object getExpandInfoByToken(String tokenValue) {
if(tokenValue == null) {
return null;
}
return getExpandInfoNotHandle(tokenValue);
}
/**
* 获取指定Token对应的账号id (不做任何特殊处理)
* @param tokenValue token值
@@ -700,15 +669,14 @@ public class StpLogic {
}
/**
* 获取指定Token对应的扩展信息 (不做任何特殊处理)
* @param tokenValue token值
* @return 账号id
* 获取Token扩展信息只在jwt模式下有效
* @param key 键值
* @return 对应的扩展数据
*/
public Object getExpandInfoNotHandle(String tokenValue) {
return getSaTokenDao().get(splicingKeyTokenValue(tokenValue));
public Object getExtra(String key) {
throw new ApiDisabledException();
}
// ---- 其它操作
/**
@@ -845,7 +813,7 @@ public class StpLogic {
String tokenValue = getTokenValue();
if(tokenValue == null || Objects.equals(tokenValue, "")) {
// 随机一个token送给Ta
tokenValue = createTokenValue(null, null, getConfig().getTimeout());
tokenValue = createTokenValue(null, null, getConfig().getTimeout(), null);
// 写入 [最后操作时间]
setLastActivityToNow(tokenValue);
// 在当前会话写入这个tokenValue
@@ -1750,5 +1718,17 @@ public class StpLogic {
public void logoutByLoginId(Object loginId, String device) {
this.kickout(loginId, device);
}
/**
* 创建一个TokenValue
* @param loginId loginId
* @param device 设备标识
* @param timeout 过期时间
* @return 生成的tokenValue
*/
@Deprecated
public String createTokenValue(Object loginId, String device, long timeout) {
return createTokenValue(loginId, device, timeout, null);
}
}

View File

@@ -1,7 +1,6 @@
package cn.dev33.satoken.stp;
import java.util.List;
import java.util.Map;
import cn.dev33.satoken.SaManager;
import cn.dev33.satoken.fun.SaFunction;
@@ -115,15 +114,6 @@ public class StpUtil {
stpLogic.login(id, device);
}
/**
* 会话登录,并指定登录设备
* @param id 账号id建议的类型long | int | String
* @param expandInfoMap 扩展信息
*/
public static void login(Object id, Map<String, Object> expandInfoMap) {
stpLogic.login(id, expandInfoMap);
}
/**
* 会话登录,并指定是否 [记住我]
* @param id 账号id建议的类型long | int | String
@@ -298,14 +288,14 @@ public class StpUtil {
}
/**
* 获取指定Token对应的扩展数据,如果未登录,则返回 null
* @param tokenValue token
* @return 账号id
* 获取Token扩展信息只在jwt模式下有效
* @param key 键值
* @return 对应的扩展数据
*/
public static Object getExpandInfoByToken(String tokenValue) {
return stpLogic.getExpandInfoByToken(tokenValue);
public static Object getExtra(String key) {
return stpLogic.getExtra(key);
}
// =================== User-Session 相关 ===================