diff --git a/sa-token-demo/sa-token-demo-solon/pom.xml b/sa-token-demo/sa-token-demo-solon/pom.xml index ffaed51b..836860f1 100644 --- a/sa-token-demo/sa-token-demo-solon/pom.xml +++ b/sa-token-demo/sa-token-demo-solon/pom.xml @@ -10,7 +10,7 @@ 1.34.0 - 2.2.1 + 2.2.3 UTF-8 UTF-8 diff --git a/sa-token-demo/sa-token-demo-sso-server-solon/pom.xml b/sa-token-demo/sa-token-demo-sso-server-solon/pom.xml index b4428659..65b53f2d 100644 --- a/sa-token-demo/sa-token-demo-sso-server-solon/pom.xml +++ b/sa-token-demo/sa-token-demo-sso-server-solon/pom.xml @@ -9,7 +9,7 @@ 1.34.0 - 2.2.1 + 2.2.3 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; + } + + /* + * 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) {