mirror of
https://gitee.com/dromara/sa-token.git
synced 2025-08-25 01:14:23 +08:00
SaSession 读写值抽取公共接口
This commit is contained in:
parent
429303c857
commit
9713b4fe26
@ -0,0 +1,202 @@
|
|||||||
|
package cn.dev33.satoken.session;
|
||||||
|
|
||||||
|
import cn.dev33.satoken.fun.SaRetFunction;
|
||||||
|
import cn.dev33.satoken.util.SaFoxUtil;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 对取值写值的一组方法封装
|
||||||
|
*
|
||||||
|
* @author kong
|
||||||
|
* @since: 2022-8-16
|
||||||
|
*/
|
||||||
|
public interface SaGetValueInterface {
|
||||||
|
|
||||||
|
// --------- 需要子类实现的方法
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 取值
|
||||||
|
* @param key key
|
||||||
|
* @return 值
|
||||||
|
*/
|
||||||
|
public abstract Object get(String key);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 写值
|
||||||
|
* @param key 名称
|
||||||
|
* @param value 值
|
||||||
|
* @return 对象自身
|
||||||
|
*/
|
||||||
|
public abstract SaGetValueInterface set(String key, Object value);
|
||||||
|
|
||||||
|
|
||||||
|
// --------- 接口提供封装的方法
|
||||||
|
|
||||||
|
// 取值
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* 取值 (指定默认值)
|
||||||
|
* @param <T> 默认值的类型
|
||||||
|
* @param key key
|
||||||
|
* @param defaultValue 取不到值时返回的默认值
|
||||||
|
* @return 值
|
||||||
|
*/
|
||||||
|
public default <T> T get(String key, T defaultValue) {
|
||||||
|
return getValueByDefaultValue(get(key), defaultValue);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* 取值 (如果值为 null,则执行 fun 函数获取值,并把函数返回值写入缓存)
|
||||||
|
* @param <T> 返回值的类型
|
||||||
|
* @param key key
|
||||||
|
* @param fun 值为null时执行的函数
|
||||||
|
* @return 值
|
||||||
|
*/
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
public default <T> T get(String key, SaRetFunction fun) {
|
||||||
|
Object value = get(key);
|
||||||
|
if(value == null) {
|
||||||
|
value = fun.run();
|
||||||
|
set(key, value);
|
||||||
|
}
|
||||||
|
return (T) value;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 取值 (转String类型)
|
||||||
|
* @param key key
|
||||||
|
* @return 值
|
||||||
|
*/
|
||||||
|
public default String getString(String key) {
|
||||||
|
Object value = get(key);
|
||||||
|
if(value == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return String.valueOf(value);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 取值 (转int类型)
|
||||||
|
* @param key key
|
||||||
|
* @return 值
|
||||||
|
*/
|
||||||
|
public default int getInt(String key) {
|
||||||
|
return getValueByDefaultValue(get(key), 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 取值 (转long类型)
|
||||||
|
* @param key key
|
||||||
|
* @return 值
|
||||||
|
*/
|
||||||
|
public default long getLong(String key) {
|
||||||
|
return getValueByDefaultValue(get(key), 0L);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 取值 (转double类型)
|
||||||
|
* @param key key
|
||||||
|
* @return 值
|
||||||
|
*/
|
||||||
|
public default double getDouble(String key) {
|
||||||
|
return getValueByDefaultValue(get(key), 0.0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 取值 (转float类型)
|
||||||
|
* @param key key
|
||||||
|
* @return 值
|
||||||
|
*/
|
||||||
|
public default float getFloat(String key) {
|
||||||
|
return getValueByDefaultValue(get(key), 0.0f);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 取值 (指定转换类型)
|
||||||
|
* @param <T> 泛型
|
||||||
|
* @param key key
|
||||||
|
* @param cs 指定转换类型
|
||||||
|
* @return 值
|
||||||
|
*/
|
||||||
|
public default <T> T getModel(String key, Class<T> cs) {
|
||||||
|
return SaFoxUtil.getValueByType(get(key), cs);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 取值 (指定转换类型, 并指定值为Null时返回的默认值)
|
||||||
|
* @param <T> 泛型
|
||||||
|
* @param key key
|
||||||
|
* @param cs 指定转换类型
|
||||||
|
* @param defaultValue 值为Null时返回的默认值
|
||||||
|
* @return 值
|
||||||
|
*/
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
public default <T> T getModel(String key, Class<T> cs, Object defaultValue) {
|
||||||
|
Object value = get(key);
|
||||||
|
if(valueIsNull(value)) {
|
||||||
|
return (T)defaultValue;
|
||||||
|
}
|
||||||
|
return SaFoxUtil.getValueByType(value, cs);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 写值 & 其它
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 写值 (只有在此 key 原本无值的情况下才会写入)
|
||||||
|
* @param key 名称
|
||||||
|
* @param value 值
|
||||||
|
* @return 对象自身
|
||||||
|
*/
|
||||||
|
public default SaGetValueInterface setByNull(String key, Object value) {
|
||||||
|
if(has(key) == false) {
|
||||||
|
set(key, value);
|
||||||
|
}
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 是否含有某个key
|
||||||
|
* @param key has
|
||||||
|
* @return 是否含有
|
||||||
|
*/
|
||||||
|
public default boolean has(String key) {
|
||||||
|
return !valueIsNull(get(key));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// --------- 内部工具方法
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 判断一个值是否为null
|
||||||
|
* @param value 指定值
|
||||||
|
* @return 此value是否为null
|
||||||
|
*/
|
||||||
|
public default boolean valueIsNull(Object value) {
|
||||||
|
return value == null || value.equals("");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据默认值来获取值
|
||||||
|
* @param <T> 泛型
|
||||||
|
* @param value 值
|
||||||
|
* @param defaultValue 默认值
|
||||||
|
* @return 转换后的值
|
||||||
|
*/
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
public default <T> T getValueByDefaultValue(Object value, T defaultValue) {
|
||||||
|
|
||||||
|
// 如果 obj 为 null,则直接返回默认值
|
||||||
|
if(valueIsNull(value)) {
|
||||||
|
return (T)defaultValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 开始转换
|
||||||
|
Class<T> cs = (Class<T>) defaultValue.getClass();
|
||||||
|
return SaFoxUtil.getValueByType(value, cs);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
@ -10,7 +10,6 @@ import java.util.concurrent.ConcurrentHashMap;
|
|||||||
|
|
||||||
import cn.dev33.satoken.SaManager;
|
import cn.dev33.satoken.SaManager;
|
||||||
import cn.dev33.satoken.dao.SaTokenDao;
|
import cn.dev33.satoken.dao.SaTokenDao;
|
||||||
import cn.dev33.satoken.fun.SaRetFunction;
|
|
||||||
import cn.dev33.satoken.util.SaFoxUtil;
|
import cn.dev33.satoken.util.SaFoxUtil;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -19,7 +18,7 @@ import cn.dev33.satoken.util.SaFoxUtil;
|
|||||||
* @author kong
|
* @author kong
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public class SaSession implements Serializable {
|
public class SaSession implements SaGetValueInterface, Serializable {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
@ -287,139 +286,25 @@ public class SaSession implements Serializable {
|
|||||||
|
|
||||||
// ----------------------- 存取值 (类型转换)
|
// ----------------------- 存取值 (类型转换)
|
||||||
|
|
||||||
// ---- 取值
|
// ---- 实现接口存取值方法
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 取值
|
* 取值
|
||||||
* @param key key
|
* @param key key
|
||||||
* @return 值
|
* @return 值
|
||||||
*/
|
*/
|
||||||
|
@Override
|
||||||
public Object get(String key) {
|
public Object get(String key) {
|
||||||
return dataMap.get(key);
|
return dataMap.get(key);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* 取值 (指定默认值)
|
|
||||||
* @param <T> 默认值的类型
|
|
||||||
* @param key key
|
|
||||||
* @param defaultValue 取不到值时返回的默认值
|
|
||||||
* @return 值
|
|
||||||
*/
|
|
||||||
public <T> T get(String key, T defaultValue) {
|
|
||||||
return getValueByDefaultValue(get(key), defaultValue);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* 取值 (如果值为null,则执行fun函数获取值)
|
|
||||||
* @param <T> 返回值的类型
|
|
||||||
* @param key key
|
|
||||||
* @param fun 值为null时执行的函数
|
|
||||||
* @return 值
|
|
||||||
*/
|
|
||||||
@SuppressWarnings("unchecked")
|
|
||||||
public <T> T get(String key, SaRetFunction fun) {
|
|
||||||
Object value = get(key);
|
|
||||||
if(value == null) {
|
|
||||||
value = fun.run();
|
|
||||||
set(key, value);
|
|
||||||
}
|
|
||||||
return (T) value;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 取值 (转String类型)
|
|
||||||
* @param key key
|
|
||||||
* @return 值
|
|
||||||
*/
|
|
||||||
public String getString(String key) {
|
|
||||||
Object value = get(key);
|
|
||||||
if(value == null) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
return String.valueOf(value);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 取值 (转int类型)
|
|
||||||
* @param key key
|
|
||||||
* @return 值
|
|
||||||
*/
|
|
||||||
public int getInt(String key) {
|
|
||||||
return getValueByDefaultValue(get(key), 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 取值 (转long类型)
|
|
||||||
* @param key key
|
|
||||||
* @return 值
|
|
||||||
*/
|
|
||||||
public long getLong(String key) {
|
|
||||||
return getValueByDefaultValue(get(key), 0L);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 取值 (转double类型)
|
|
||||||
* @param key key
|
|
||||||
* @return 值
|
|
||||||
*/
|
|
||||||
public double getDouble(String key) {
|
|
||||||
return getValueByDefaultValue(get(key), 0.0);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 取值 (转float类型)
|
|
||||||
* @param key key
|
|
||||||
* @return 值
|
|
||||||
*/
|
|
||||||
public float getFloat(String key) {
|
|
||||||
return getValueByDefaultValue(get(key), 0.0f);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 取值 (指定转换类型)
|
|
||||||
* @param <T> 泛型
|
|
||||||
* @param key key
|
|
||||||
* @param cs 指定转换类型
|
|
||||||
* @return 值
|
|
||||||
*/
|
|
||||||
public <T> T getModel(String key, Class<T> cs) {
|
|
||||||
return SaFoxUtil.getValueByType(get(key), cs);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 取值 (指定转换类型, 并指定值为Null时返回的默认值)
|
|
||||||
* @param <T> 泛型
|
|
||||||
* @param key key
|
|
||||||
* @param cs 指定转换类型
|
|
||||||
* @param defaultValue 值为Null时返回的默认值
|
|
||||||
* @return 值
|
|
||||||
*/
|
|
||||||
@SuppressWarnings("unchecked")
|
|
||||||
public <T> T getModel(String key, Class<T> cs, Object defaultValue) {
|
|
||||||
Object value = get(key);
|
|
||||||
if(valueIsNull(value)) {
|
|
||||||
return (T)defaultValue;
|
|
||||||
}
|
|
||||||
return SaFoxUtil.getValueByType(value, cs);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 返回当前Session的所有key
|
|
||||||
*
|
|
||||||
* @return 所有值的key列表
|
|
||||||
*/
|
|
||||||
public Set<String> keys() {
|
|
||||||
return dataMap.keySet();
|
|
||||||
}
|
|
||||||
|
|
||||||
// ---- 其他
|
|
||||||
/**
|
/**
|
||||||
* 写值
|
* 写值
|
||||||
* @param key 名称
|
* @param key 名称
|
||||||
* @param value 值
|
* @param value 值
|
||||||
* @return 对象自身
|
* @return 对象自身
|
||||||
*/
|
*/
|
||||||
|
@Override
|
||||||
public SaSession set(String key, Object value) {
|
public SaSession set(String key, Object value) {
|
||||||
dataMap.put(key, value);
|
dataMap.put(key, value);
|
||||||
update();
|
update();
|
||||||
@ -432,6 +317,7 @@ public class SaSession implements Serializable {
|
|||||||
* @param value 值
|
* @param value 值
|
||||||
* @return 对象自身
|
* @return 对象自身
|
||||||
*/
|
*/
|
||||||
|
@Override
|
||||||
public SaSession setByNull(String key, Object value) {
|
public SaSession setByNull(String key, Object value) {
|
||||||
if(has(key) == false) {
|
if(has(key) == false) {
|
||||||
dataMap.put(key, value);
|
dataMap.put(key, value);
|
||||||
@ -440,14 +326,7 @@ public class SaSession implements Serializable {
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// ---- 其它方法
|
||||||
* 是否含有某个key
|
|
||||||
* @param key has
|
|
||||||
* @return 是否含有
|
|
||||||
*/
|
|
||||||
public boolean has(String key) {
|
|
||||||
return !valueIsNull(get(key));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 删值
|
* 删值
|
||||||
@ -468,6 +347,15 @@ public class SaSession implements Serializable {
|
|||||||
update();
|
update();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 返回当前Session的所有key
|
||||||
|
*
|
||||||
|
* @return 所有值的key列表
|
||||||
|
*/
|
||||||
|
public Set<String> keys() {
|
||||||
|
return dataMap.keySet();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取数据挂载集合(如果更新map里的值,请调用session.update()方法避免产生脏数据 )
|
* 获取数据挂载集合(如果更新map里的值,请调用session.update()方法避免产生脏数据 )
|
||||||
*
|
*
|
||||||
@ -487,144 +375,4 @@ public class SaSession implements Serializable {
|
|||||||
this.update();
|
this.update();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// --------- 工具方法
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 判断一个值是否为null
|
|
||||||
* @param value 指定值
|
|
||||||
* @return 此value是否为null
|
|
||||||
*/
|
|
||||||
public boolean valueIsNull(Object value) {
|
|
||||||
return value == null || value.equals("");
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 根据默认值来获取值
|
|
||||||
* @param <T> 泛型
|
|
||||||
* @param value 值
|
|
||||||
* @param defaultValue 默认值
|
|
||||||
* @return 转换后的值
|
|
||||||
*/
|
|
||||||
@SuppressWarnings("unchecked")
|
|
||||||
protected <T> T getValueByDefaultValue(Object value, T defaultValue) {
|
|
||||||
|
|
||||||
// 如果 obj 为 null,则直接返回默认值
|
|
||||||
if(valueIsNull(value)) {
|
|
||||||
return (T)defaultValue;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 开始转换
|
|
||||||
Class<T> cs = (Class<T>) defaultValue.getClass();
|
|
||||||
return SaFoxUtil.getValueByType(value, cs);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// ----------------------- 旧API
|
|
||||||
|
|
||||||
/**
|
|
||||||
* <h1> 此函数设计已过时,未来版本可能移除此类,请及时更换为: session.set(key) </h1>
|
|
||||||
* 写入一个值
|
|
||||||
*
|
|
||||||
* @param key 名称
|
|
||||||
* @param value 值
|
|
||||||
*/
|
|
||||||
@Deprecated
|
|
||||||
public void setAttribute(String key, Object value) {
|
|
||||||
dataMap.put(key, value);
|
|
||||||
update();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* <h1> 此函数设计已过时,未来版本可能移除此类,请及时更换为: session.get(key) </h1>
|
|
||||||
* 取出一个值
|
|
||||||
*
|
|
||||||
* @param key 名称
|
|
||||||
* @return 值
|
|
||||||
*/
|
|
||||||
@Deprecated
|
|
||||||
public Object getAttribute(String key) {
|
|
||||||
return dataMap.get(key);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* <h1> 此函数设计已过时,未来版本可能移除此类,请及时更换为: session.get(key, defaultValue) </h1>
|
|
||||||
* 取值,并指定取不到值时的默认值
|
|
||||||
*
|
|
||||||
* @param key 名称
|
|
||||||
* @param defaultValue 取不到值的时候返回的默认值
|
|
||||||
* @return value
|
|
||||||
*/
|
|
||||||
@Deprecated
|
|
||||||
public Object getAttribute(String key, Object defaultValue) {
|
|
||||||
Object value = getAttribute(key);
|
|
||||||
if (value != null) {
|
|
||||||
return value;
|
|
||||||
}
|
|
||||||
return defaultValue;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* <h1> 此函数设计已过时,未来版本可能移除此类,请及时更换为: session.delete(key) </h1>
|
|
||||||
* 移除一个值
|
|
||||||
*
|
|
||||||
* @param key 要移除的值的名字
|
|
||||||
*/
|
|
||||||
@Deprecated
|
|
||||||
public void removeAttribute(String key) {
|
|
||||||
dataMap.remove(key);
|
|
||||||
update();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* <h1> 此函数设计已过时,未来版本可能移除此类,请及时更换为: session.clear() </h1>
|
|
||||||
* 清空所有值
|
|
||||||
*/
|
|
||||||
@Deprecated
|
|
||||||
public void clearAttribute() {
|
|
||||||
dataMap.clear();
|
|
||||||
update();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* <h1> 此函数设计已过时,未来版本可能移除此类,请及时更换为: session.has(key) </h1>
|
|
||||||
* 是否含有指定key
|
|
||||||
*
|
|
||||||
* @param key 是否含有指定值
|
|
||||||
* @return 是否含有
|
|
||||||
*/
|
|
||||||
@Deprecated
|
|
||||||
public boolean containsAttribute(String key) {
|
|
||||||
return dataMap.containsKey(key);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* <h1> 此函数设计已过时,未来版本可能移除此类,请及时更换为: session.keys() </h1>
|
|
||||||
* 返回当前session会话所有key
|
|
||||||
*
|
|
||||||
* @return 所有值的key列表
|
|
||||||
*/
|
|
||||||
@Deprecated
|
|
||||||
public Set<String> attributeKeys() {
|
|
||||||
return dataMap.keySet();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* <h1> 此函数设计已过时,未来版本可能移除此类,请及时更换为: session.setByNull(),用法保持不变 </h1>
|
|
||||||
* 写值(只有在此key原本无值的时候才会写入)
|
|
||||||
* @param key 名称
|
|
||||||
* @param value 值
|
|
||||||
* @return 对象自身
|
|
||||||
*/
|
|
||||||
@Deprecated
|
|
||||||
public SaSession setDefaultValue(String key, Object value) {
|
|
||||||
if(has(key) == false) {
|
|
||||||
dataMap.put(key, value);
|
|
||||||
update();
|
|
||||||
}
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user