diff --git a/sa-token-core/src/main/java/cn/dev33/satoken/fun/SaRetFunction.java b/sa-token-core/src/main/java/cn/dev33/satoken/fun/SaRetFunction.java new file mode 100644 index 00000000..d15bb0d9 --- /dev/null +++ b/sa-token-core/src/main/java/cn/dev33/satoken/fun/SaRetFunction.java @@ -0,0 +1,18 @@ +package cn.dev33.satoken.fun; + +/** + * 设定一个函数,并返回一个值,方便在Lambda表达式下的函数式编程 + * @author kong + * + */ +public interface SaRetFunction { + + + /** + * 执行的方法 + * @return 返回值 + */ + public Object run(); + + +} diff --git a/sa-token-core/src/main/java/cn/dev33/satoken/session/SaSession.java b/sa-token-core/src/main/java/cn/dev33/satoken/session/SaSession.java index cc7fb1d5..84600efd 100644 --- a/sa-token-core/src/main/java/cn/dev33/satoken/session/SaSession.java +++ b/sa-token-core/src/main/java/cn/dev33/satoken/session/SaSession.java @@ -8,6 +8,7 @@ import java.util.Vector; import java.util.concurrent.ConcurrentHashMap; import cn.dev33.satoken.SaManager; +import cn.dev33.satoken.fun.SaRetFunction; /** * Session Model @@ -325,6 +326,24 @@ public class SaSession implements Serializable { return getValueByDefaultValue(get(key), defaultValue); } + /** + * + * 取值 (如果值为null,则执行fun函数获取值) + * @param 返回值的类型 + * @param key key + * @param fun 值为null时执行的函数 + * @return 值 + */ + @SuppressWarnings("unchecked") + public 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 diff --git a/sa-token-demo/sa-token-demo-springboot/src/main/java/com/pj/test/TestController.java b/sa-token-demo/sa-token-demo-springboot/src/main/java/com/pj/test/TestController.java index ba3dad35..142e5f20 100644 --- a/sa-token-demo/sa-token-demo-springboot/src/main/java/com/pj/test/TestController.java +++ b/sa-token-demo/sa-token-demo-springboot/src/main/java/com/pj/test/TestController.java @@ -241,7 +241,20 @@ public class TestController { @RequestMapping("test") public AjaxJson test() { System.out.println("进来了"); - System.out.println(StpUtil.getTokenInfo()); +// System.out.println(StpUtil.getTokenInfo()); + StpUtil.setLoginId(10001); + String ss = StpUtil.getSession().get("name", () -> { + System.out.println("-=------进入方法"); + return "zhangsan"; + }); + ss = StpUtil.getSession().get("name", () -> { + System.out.println("-=------进入方法2"); + return "zhangsan2"; + }); + + StpUtil.getSession().delete("name"); + System.out.println(ss); + return AjaxJson.getSuccess("访问成功"); }