diff --git a/sa-token-demo/sa-token-demo-sso1-client-solon/pom.xml b/sa-token-demo/sa-token-demo-sso1-client-solon/pom.xml
new file mode 100644
index 00000000..113dc247
--- /dev/null
+++ b/sa-token-demo/sa-token-demo-sso1-client-solon/pom.xml
@@ -0,0 +1,54 @@
+
+ 4.0.0
+ cn.dev33
+ sa-token-demo-sso1-client-solon
+ 0.0.1-SNAPSHOT
+
+
+
+ org.noear
+ solon-parent
+ 2.2.3
+
+
+
+
+
+ 1.34.0
+
+
+
+
+
+
+ org.noear
+ solon-api
+
+
+
+
+ cn.dev33
+ sa-token-solon-plugin
+ ${sa-token.version}
+
+
+
+
+ cn.dev33
+ sa-token-sso
+ ${sa-token.version}
+
+
+
+
+ cn.dev33
+ sa-token-dao-redisx
+ ${sa-token.version}
+
+
+
+
+
+
\ No newline at end of file
diff --git a/sa-token-demo/sa-token-demo-sso1-client-solon/src/main/java/com/pj/SaConfig.java b/sa-token-demo/sa-token-demo-sso1-client-solon/src/main/java/com/pj/SaConfig.java
new file mode 100644
index 00000000..d0e9fc48
--- /dev/null
+++ b/sa-token-demo/sa-token-demo-sso1-client-solon/src/main/java/com/pj/SaConfig.java
@@ -0,0 +1,22 @@
+package com.pj;
+
+import cn.dev33.satoken.dao.SaTokenDao;
+import cn.dev33.satoken.dao.SaTokenDaoOfRedis;
+import org.noear.solon.annotation.Bean;
+import org.noear.solon.annotation.Configuration;
+import org.noear.solon.annotation.Inject;
+
+/**
+ * @author noear 2023/3/13 created
+ */
+@Configuration
+public class SaConfig {
+
+ /**
+ * 配置 Sa-Token 单独使用的Redis连接 (此处需要和SSO-Server端连接同一个Redis)
+ * */
+ @Bean
+ public SaTokenDao saTokenDaoInit(@Inject("${sa-token-dao.redis}") SaTokenDaoOfRedis saTokenDao) {
+ return saTokenDao;
+ }
+}
diff --git a/sa-token-demo/sa-token-demo-sso1-client-solon/src/main/java/com/pj/SaSso1ClientApp.java b/sa-token-demo/sa-token-demo-sso1-client-solon/src/main/java/com/pj/SaSso1ClientApp.java
new file mode 100644
index 00000000..f45f82dc
--- /dev/null
+++ b/sa-token-demo/sa-token-demo-sso1-client-solon/src/main/java/com/pj/SaSso1ClientApp.java
@@ -0,0 +1,20 @@
+package com.pj;
+
+
+import org.noear.solon.Solon;
+import org.noear.solon.annotation.SolonMain;
+
+/**
+ * SSO模式一,Client端 Demo
+ * @author kong
+ *
+ */
+@SolonMain
+public class SaSso1ClientApp {
+
+ public static void main(String[] args) {
+ Solon.start(SaSso1ClientApp.class, args);
+ System.out.println("\nSa-Token SSO模式一 Client端启动成功");
+ }
+
+}
\ No newline at end of file
diff --git a/sa-token-demo/sa-token-demo-sso1-client-solon/src/main/java/com/pj/sso/SsoClientController.java b/sa-token-demo/sa-token-demo-sso1-client-solon/src/main/java/com/pj/sso/SsoClientController.java
new file mode 100644
index 00000000..85313296
--- /dev/null
+++ b/sa-token-demo/sa-token-demo-sso1-client-solon/src/main/java/com/pj/sso/SsoClientController.java
@@ -0,0 +1,40 @@
+package com.pj.sso;
+
+import cn.dev33.satoken.sso.SaSsoManager;
+import cn.dev33.satoken.stp.StpUtil;
+import cn.dev33.satoken.util.SaResult;
+import org.noear.solon.annotation.Controller;
+import org.noear.solon.annotation.Mapping;
+import org.noear.solon.core.handle.Context;
+import org.noear.solon.core.handle.Render;
+
+/**
+ * Sa-Token-SSO Client端 Controller
+ * @author kong
+ */
+@Controller
+public class SsoClientController implements Render {
+
+ // SSO-Client端:首页
+ @Mapping("/")
+ public String index() {
+ String authUrl = SaSsoManager.getConfig().splicingAuthUrl();
+ String solUrl = SaSsoManager.getConfig().splicingSloUrl();
+ String str = "Sa-Token SSO-Client 应用端
" +
+ "当前会话是否登录:" + StpUtil.isLogin() + "
" +
+ "登录 " +
+ "注销
";
+ return str;
+ }
+
+ // 全局异常拦截并转换
+ @Override
+ public void render(Object data, Context ctx) throws Throwable {
+ if(data instanceof Exception){
+ data = SaResult.error(((Exception)data).getMessage());
+ }
+
+ ctx.render(data);
+ }
+
+}
diff --git a/sa-token-demo/sa-token-demo-sso1-client-solon/src/main/resources/app.yml b/sa-token-demo/sa-token-demo-sso1-client-solon/src/main/resources/app.yml
new file mode 100644
index 00000000..2d8ca0df
--- /dev/null
+++ b/sa-token-demo/sa-token-demo-sso1-client-solon/src/main/resources/app.yml
@@ -0,0 +1,25 @@
+# 端口
+server:
+ port: 9001
+
+# Sa-Token 配置
+sa-token:
+ # SSO-相关配置
+ sso:
+ # SSO-Server端-单点登录授权地址
+ auth-url: http://sso.stp.com:9000/sso/auth
+ # SSO-Server端-单点注销地址
+ slo-url: http://sso.stp.com:9000/sso/signout
+
+# 配置 Sa-Token 单独使用的Redis连接 (此处需要和SSO-Server端连接同一个Redis)
+sa-token-dao: #名字可以随意取
+ redis:
+ server: "localhost:6379"
+ password: 123456
+ db: 1
+ maxTotal: 200
+
+
+
+
+
\ No newline at end of file
diff --git a/sa-token-demo/sa-token-demo-sso2-client-solon/pom.xml b/sa-token-demo/sa-token-demo-sso2-client-solon/pom.xml
new file mode 100644
index 00000000..009a64c6
--- /dev/null
+++ b/sa-token-demo/sa-token-demo-sso2-client-solon/pom.xml
@@ -0,0 +1,53 @@
+
+ 4.0.0
+ cn.dev33
+ sa-token-demo-sso2-client-solon
+ 0.0.1-SNAPSHOT
+
+
+
+ org.noear
+ solon-parent
+ 2.2.3
+
+
+
+
+
+ 1.34.0
+
+
+
+
+
+
+ org.noear
+ solon-api
+
+
+
+
+ cn.dev33
+ sa-token-solon-plugin
+ ${sa-token.version}
+
+
+
+
+ cn.dev33
+ sa-token-sso
+ ${sa-token.version}
+
+
+
+
+ cn.dev33
+ sa-token-dao-redisx
+ ${sa-token.version}
+
+
+
+
+
\ No newline at end of file
diff --git a/sa-token-demo/sa-token-demo-sso2-client-solon/src/main/java/com/pj/SaConfig.java b/sa-token-demo/sa-token-demo-sso2-client-solon/src/main/java/com/pj/SaConfig.java
new file mode 100644
index 00000000..d0e9fc48
--- /dev/null
+++ b/sa-token-demo/sa-token-demo-sso2-client-solon/src/main/java/com/pj/SaConfig.java
@@ -0,0 +1,22 @@
+package com.pj;
+
+import cn.dev33.satoken.dao.SaTokenDao;
+import cn.dev33.satoken.dao.SaTokenDaoOfRedis;
+import org.noear.solon.annotation.Bean;
+import org.noear.solon.annotation.Configuration;
+import org.noear.solon.annotation.Inject;
+
+/**
+ * @author noear 2023/3/13 created
+ */
+@Configuration
+public class SaConfig {
+
+ /**
+ * 配置 Sa-Token 单独使用的Redis连接 (此处需要和SSO-Server端连接同一个Redis)
+ * */
+ @Bean
+ public SaTokenDao saTokenDaoInit(@Inject("${sa-token-dao.redis}") SaTokenDaoOfRedis saTokenDao) {
+ return saTokenDao;
+ }
+}
diff --git a/sa-token-demo/sa-token-demo-sso2-client-solon/src/main/java/com/pj/SaSso2ClientApp.java b/sa-token-demo/sa-token-demo-sso2-client-solon/src/main/java/com/pj/SaSso2ClientApp.java
new file mode 100644
index 00000000..8e04700f
--- /dev/null
+++ b/sa-token-demo/sa-token-demo-sso2-client-solon/src/main/java/com/pj/SaSso2ClientApp.java
@@ -0,0 +1,15 @@
+package com.pj;
+
+
+import org.noear.solon.Solon;
+import org.noear.solon.annotation.SolonMain;
+
+@SolonMain
+public class SaSso2ClientApp {
+
+ public static void main(String[] args) {
+ Solon.start(SaSso2ClientApp.class, args);
+ System.out.println("\nSa-Token SSO模式二 Client端启动成功");
+ }
+
+}
\ No newline at end of file
diff --git a/sa-token-demo/sa-token-demo-sso2-client-solon/src/main/java/com/pj/h5/CorsFilter.java b/sa-token-demo/sa-token-demo-sso2-client-solon/src/main/java/com/pj/h5/CorsFilter.java
new file mode 100644
index 00000000..f7a95bc0
--- /dev/null
+++ b/sa-token-demo/sa-token-demo-sso2-client-solon/src/main/java/com/pj/h5/CorsFilter.java
@@ -0,0 +1,38 @@
+package com.pj.h5;
+
+import org.noear.solon.annotation.Component;
+import org.noear.solon.core.handle.Context;
+import org.noear.solon.core.handle.Filter;
+import org.noear.solon.core.handle.FilterChain;
+
+
+/**
+ * 跨域过滤器
+ * @author kong
+ */
+@Component(index = -200)
+public class CorsFilter implements Filter {
+ static final String OPTIONS = "OPTIONS";
+
+ @Override
+ public void doFilter(Context ctx, FilterChain chain) throws Throwable {
+ // 允许指定域访问跨域资源
+ ctx.headerSet("Access-Control-Allow-Origin", "*");
+ // 允许所有请求方式
+ ctx.headerSet("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
+ // 有效时间
+ ctx.headerSet("Access-Control-Max-Age", "3600");
+ // 允许的header参数
+ ctx.headerSet("Access-Control-Allow-Headers", "x-requested-with,satoken");
+
+ // 如果是预检请求,直接返回
+ if (OPTIONS.equals(ctx.method())) {
+ System.out.println("=======================浏览器发来了OPTIONS预检请求==========");
+ ctx.output("");
+ return;
+ }
+
+ // System.out.println("*********************************过滤器被使用**************************");
+ chain.doFilter(ctx);
+ }
+}
diff --git a/sa-token-demo/sa-token-demo-sso2-client-solon/src/main/java/com/pj/h5/H5Controller.java b/sa-token-demo/sa-token-demo-sso2-client-solon/src/main/java/com/pj/h5/H5Controller.java
new file mode 100644
index 00000000..efa3d801
--- /dev/null
+++ b/sa-token-demo/sa-token-demo-sso2-client-solon/src/main/java/com/pj/h5/H5Controller.java
@@ -0,0 +1,55 @@
+package com.pj.h5;
+
+import cn.dev33.satoken.sso.SaSsoProcessor;
+import cn.dev33.satoken.sso.SaSsoUtil;
+import cn.dev33.satoken.stp.StpUtil;
+import cn.dev33.satoken.util.SaResult;
+import org.noear.solon.annotation.Controller;
+import org.noear.solon.annotation.Mapping;
+import org.noear.solon.core.handle.Context;
+import org.noear.solon.core.handle.Render;
+
+/**
+ * 前后台分离架构下集成SSO所需的代码 (SSO-Client端)
+ * (注:如果不需要前后端分离架构下集成SSO,可删除此包下所有代码)
+ * @author kong
+ *
+ */
+@Controller
+public class H5Controller implements Render {
+
+ // 当前是否登录
+ @Mapping("/sso/isLogin")
+ public Object isLogin() {
+ return SaResult.data(StpUtil.isLogin());
+ }
+
+ // 返回SSO认证中心登录地址
+ @Mapping("/sso/getSsoAuthUrl")
+ public SaResult getSsoAuthUrl(String clientLoginUrl) {
+ String serverAuthUrl = SaSsoUtil.buildServerAuthUrl(clientLoginUrl, "");
+ return SaResult.data(serverAuthUrl);
+ }
+
+ // 根据ticket进行登录
+ @Mapping("/sso/doLoginByTicket")
+ public SaResult doLoginByTicket(String ticket) {
+ Object loginId = SaSsoProcessor.instance.checkTicket(ticket, "/sso/doLoginByTicket");
+ if(loginId != null) {
+ StpUtil.login(loginId);
+ return SaResult.data(StpUtil.getTokenValue());
+ }
+ return SaResult.error("无效ticket:" + ticket);
+ }
+
+ // 全局异常拦截并转换
+ @Override
+ public void render(Object data, Context ctx) throws Throwable {
+ if(data instanceof Exception){
+ data = SaResult.error(((Exception)data).getMessage());
+ }
+
+ ctx.render(data);
+ }
+
+}
diff --git a/sa-token-demo/sa-token-demo-sso2-client-solon/src/main/java/com/pj/sso/SsoClientController.java b/sa-token-demo/sa-token-demo-sso2-client-solon/src/main/java/com/pj/sso/SsoClientController.java
new file mode 100644
index 00000000..61762374
--- /dev/null
+++ b/sa-token-demo/sa-token-demo-sso2-client-solon/src/main/java/com/pj/sso/SsoClientController.java
@@ -0,0 +1,49 @@
+package com.pj.sso;
+
+
+import cn.dev33.satoken.sso.SaSsoProcessor;
+import cn.dev33.satoken.stp.StpUtil;
+import cn.dev33.satoken.util.SaResult;
+import org.noear.solon.annotation.Controller;
+import org.noear.solon.annotation.Mapping;
+import org.noear.solon.core.handle.Context;
+import org.noear.solon.core.handle.Render;
+
+/**
+ * Sa-Token-SSO Client端 Controller
+ * @author kong
+ */
+@Controller
+public class SsoClientController implements Render {
+
+ // 首页
+ @Mapping("/")
+ public String index() {
+ String str = "Sa-Token SSO-Client 应用端
" +
+ "当前会话是否登录:" + StpUtil.isLogin() + "
" +
+ "登录 " +
+ "注销
";
+ return str;
+ }
+
+ /*
+ * SSO-Client端:处理所有SSO相关请求
+ * http://{host}:{port}/sso/login -- Client端登录地址,接受参数:back=登录后的跳转地址
+ * http://{host}:{port}/sso/logout -- Client端单点注销地址(isSlo=true时打开),接受参数:back=注销后的跳转地址
+ * http://{host}:{port}/sso/logoutCall -- Client端单点注销回调地址(isSlo=true时打开),此接口为框架回调,开发者无需关心
+ */
+ @Mapping("/sso/*")
+ public Object ssoRequest() {
+ return SaSsoProcessor.instance.clientDister();
+ }
+
+ // 全局异常拦截并转换
+ @Override
+ public void render(Object data, Context ctx) throws Throwable {
+ if(data instanceof Exception){
+ data = SaResult.error(((Exception)data).getMessage());
+ }
+
+ ctx.render(data);
+ }
+}
diff --git a/sa-token-demo/sa-token-demo-sso2-client-solon/src/main/resources/app.yml b/sa-token-demo/sa-token-demo-sso2-client-solon/src/main/resources/app.yml
new file mode 100644
index 00000000..4c06a05c
--- /dev/null
+++ b/sa-token-demo/sa-token-demo-sso2-client-solon/src/main/resources/app.yml
@@ -0,0 +1,26 @@
+# 端口
+server:
+ port: 9001
+
+# sa-token配置
+sa-token:
+ # SSO-相关配置
+ sso:
+ # SSO-Server端 统一认证地址
+ auth-url: http://sa-sso-server.com:9000/sso/auth
+ # auth-url: http://127.0.0.1:8848/sa-token-demo-sso-server-h5/sso-auth.html
+ # 是否打开单点注销接口
+ is-slo: true
+
+# 配置 Sa-Token 单独使用的Redis连接 (此处需要和SSO-Server端连接同一个Redis)
+sa-token-dao: #名字可以随意取
+ redis:
+ server: "localhost:6379"
+ password: 123456
+ db: 1
+ maxTotal: 200
+
+
+
+
+
\ No newline at end of file
diff --git a/sa-token-demo/sa-token-demo-sso3-client-solon/pom.xml b/sa-token-demo/sa-token-demo-sso3-client-solon/pom.xml
new file mode 100644
index 00000000..2c78a6bf
--- /dev/null
+++ b/sa-token-demo/sa-token-demo-sso3-client-solon/pom.xml
@@ -0,0 +1,62 @@
+
+ 4.0.0
+ cn.dev33
+ sa-token-demo-sso3-client-solon
+ 0.0.1-SNAPSHOT
+
+
+
+ org.noear
+ solon-parent
+ 2.2.3
+
+
+
+
+
+ 1.34.0
+
+
+
+
+
+
+ org.noear
+ solon-api
+
+
+
+
+ cn.dev33
+ sa-token-solon-plugin
+ ${sa-token.version}
+
+
+
+
+ cn.dev33
+ sa-token-sso
+ ${sa-token.version}
+
+
+
+
+ cn.dev33
+ sa-token-dao-redisx
+ ${sa-token.version}
+
+
+
+
+ com.dtflys.forest
+ forest-solon-plugin
+ 1.5.29
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/sa-token-demo/sa-token-demo-sso3-client-solon/src/main/java/com/pj/SaConfig.java b/sa-token-demo/sa-token-demo-sso3-client-solon/src/main/java/com/pj/SaConfig.java
new file mode 100644
index 00000000..8faf05a1
--- /dev/null
+++ b/sa-token-demo/sa-token-demo-sso3-client-solon/src/main/java/com/pj/SaConfig.java
@@ -0,0 +1,22 @@
+package com.pj;
+
+import cn.dev33.satoken.dao.SaTokenDao;
+import cn.dev33.satoken.dao.SaTokenDaoOfRedis;
+import org.noear.solon.annotation.Bean;
+import org.noear.solon.annotation.Configuration;
+import org.noear.solon.annotation.Inject;
+
+/**
+ * @author noear 2023/3/13 created
+ */
+@Configuration
+public class SaConfig {
+
+ /**
+ * 构建建 SaToken redis dao(如果不需要 redis;可以注释掉)
+ * */
+ @Bean
+ public SaTokenDao saTokenDaoInit(@Inject("${sa-token-dao.redis}") SaTokenDaoOfRedis saTokenDao) {
+ return saTokenDao;
+ }
+}
diff --git a/sa-token-demo/sa-token-demo-sso3-client-solon/src/main/java/com/pj/SaSso3ClientApp.java b/sa-token-demo/sa-token-demo-sso3-client-solon/src/main/java/com/pj/SaSso3ClientApp.java
new file mode 100644
index 00000000..f30e4a25
--- /dev/null
+++ b/sa-token-demo/sa-token-demo-sso3-client-solon/src/main/java/com/pj/SaSso3ClientApp.java
@@ -0,0 +1,14 @@
+package com.pj;
+
+import org.noear.solon.Solon;
+import org.noear.solon.annotation.SolonMain;
+
+@SolonMain
+public class SaSso3ClientApp {
+
+ public static void main(String[] args) {
+ Solon.start(SaSso3ClientApp.class, args);
+ System.out.println("\nSa-Token SSO模式三 Client端启动成功");
+ }
+
+}
\ No newline at end of file
diff --git a/sa-token-demo/sa-token-demo-sso3-client-solon/src/main/java/com/pj/sso/SsoClientController.java b/sa-token-demo/sa-token-demo-sso3-client-solon/src/main/java/com/pj/sso/SsoClientController.java
new file mode 100644
index 00000000..6b3fb3f6
--- /dev/null
+++ b/sa-token-demo/sa-token-demo-sso3-client-solon/src/main/java/com/pj/sso/SsoClientController.java
@@ -0,0 +1,57 @@
+package com.pj.sso;
+
+import cn.dev33.satoken.sso.SaSsoProcessor;
+import cn.dev33.satoken.sso.SaSsoUtil;
+import cn.dev33.satoken.stp.StpUtil;
+import cn.dev33.satoken.util.SaResult;
+import org.noear.solon.annotation.Controller;
+import org.noear.solon.annotation.Mapping;
+import org.noear.solon.core.handle.Context;
+import org.noear.solon.core.handle.Render;
+
+/**
+ * Sa-Token-SSO Client端 Controller
+ * @author kong
+ */
+@Controller
+public class SsoClientController implements Render {
+
+ // SSO-Client端:首页
+ @Mapping("/")
+ public String index() {
+ String str = "Sa-Token SSO-Client 应用端
" +
+ "当前会话是否登录:" + StpUtil.isLogin() + "
" +
+ "登录" +
+ " 注销
";
+ return str;
+ }
+
+ /*
+ * SSO-Client端:处理所有SSO相关请求
+ * http://{host}:{port}/sso/login -- Client端登录地址,接受参数:back=登录后的跳转地址
+ * http://{host}:{port}/sso/logout -- Client端单点注销地址(isSlo=true时打开),接受参数:back=注销后的跳转地址
+ * http://{host}:{port}/sso/logoutCall -- Client端单点注销回调地址(isSlo=true时打开),此接口为框架回调,开发者无需关心
+ */
+ @Mapping("/sso/*")
+ public Object ssoRequest() {
+ return SaSsoProcessor.instance.clientDister();
+ }
+
+ // 查询我的账号信息
+ @Mapping("/sso/myinfo")
+ public Object myinfo() {
+ Object userinfo = SaSsoUtil.getUserinfo(StpUtil.getLoginId());
+ System.out.println("--------info:" + userinfo);
+ return userinfo;
+ }
+
+ // 全局异常拦截并转换
+ @Override
+ public void render(Object data, Context ctx) throws Throwable {
+ if(data instanceof Exception){
+ data = SaResult.error(((Exception)data).getMessage());
+ }
+
+ ctx.render(data);
+ }
+}
diff --git a/sa-token-demo/sa-token-demo-sso3-client-solon/src/main/java/com/pj/sso/SsoConfig.java b/sa-token-demo/sa-token-demo-sso3-client-solon/src/main/java/com/pj/sso/SsoConfig.java
new file mode 100644
index 00000000..d4a33b03
--- /dev/null
+++ b/sa-token-demo/sa-token-demo-sso3-client-solon/src/main/java/com/pj/sso/SsoConfig.java
@@ -0,0 +1,22 @@
+package com.pj.sso;
+
+import cn.dev33.satoken.config.SaSsoConfig;
+import com.dtflys.forest.Forest;
+import org.noear.solon.annotation.Bean;
+import org.noear.solon.annotation.Configuration;
+
+/**
+ * @author noear 2023/3/13 created
+ */
+@Configuration
+public class SsoConfig {
+ // 配置SSO相关参数
+ @Bean
+ private void configSso(SaSsoConfig sso) {
+ // 配置Http请求处理器
+ sso.setSendHttp(url -> {
+ System.out.println("------ 发起请求:" + url);
+ return Forest.get(url).executeAsString();
+ });
+ }
+}
diff --git a/sa-token-demo/sa-token-demo-sso3-client-solon/src/main/resources/app.yml b/sa-token-demo/sa-token-demo-sso3-client-solon/src/main/resources/app.yml
new file mode 100644
index 00000000..b1e0ff8c
--- /dev/null
+++ b/sa-token-demo/sa-token-demo-sso3-client-solon/src/main/resources/app.yml
@@ -0,0 +1,38 @@
+# 端口
+server:
+ port: 9001
+
+# sa-token配置
+sa-token:
+ # SSO-相关配置
+ sso:
+ # SSO-Server端 统一认证地址
+ auth-url: http://sa-sso-server.com:9000/sso/auth
+ # 使用Http请求校验ticket
+ is-http: true
+ # SSO-Server端 ticket校验地址
+ check-ticket-url: http://sa-sso-server.com:9000/sso/checkTicket
+ # 打开单点注销功能
+ is-slo: true
+ # 单点注销地址
+ slo-url: http://sa-sso-server.com:9000/sso/signout
+ # 接口调用秘钥
+ secretkey: kQwIOrYvnXmSDkwEiFngrKidMcdrgKor
+ # SSO-Server端 查询userinfo地址
+ userinfo-url: http://sa-sso-server.com:9000/sso/userinfo
+
+
+# 配置 Sa-Token Dao(此处与SSO-Server端连接不同的Redis)
+sa-token-dao: #名字可以随意取
+ redis:
+ server: "localhost:6379"
+ password: 123456
+ db: 2
+ maxTotal: 200
+
+forest:
+ # 关闭 forest 请求日志打印
+ log-enabled: false
+
+
+
\ No newline at end of file
diff --git a/sa-token-dependencies/pom.xml b/sa-token-dependencies/pom.xml
index 8d17df16..8388144b 100644
--- a/sa-token-dependencies/pom.xml
+++ b/sa-token-dependencies/pom.xml
@@ -23,7 +23,7 @@
3.1.0
6.0.0
3.0.9.RELEASE
- 2.2.1
+ 2.2.3
1.4.5
3.2.54
4.9.17
diff --git a/sa-token-plugin/sa-token-dao-redisx/src/main/java/cn/dev33/satoken/dao/SaTokenDaoOfRedis.java b/sa-token-plugin/sa-token-dao-redisx/src/main/java/cn/dev33/satoken/dao/SaTokenDaoOfRedis.java
index 5966c3b3..de6f4045 100644
--- a/sa-token-plugin/sa-token-dao-redisx/src/main/java/cn/dev33/satoken/dao/SaTokenDaoOfRedis.java
+++ b/sa-token-plugin/sa-token-dao-redisx/src/main/java/cn/dev33/satoken/dao/SaTokenDaoOfRedis.java
@@ -10,7 +10,6 @@ import java.util.Properties;
* @author noear
* @since 1.6
*/
-@Deprecated
public class SaTokenDaoOfRedis extends SaTokenDaoOfRedisBase64 {
public SaTokenDaoOfRedis(Properties props) {