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..3484cb10 --- /dev/null +++ b/sa-token-demo/sa-token-demo-sso3-client-solon/pom.xml @@ -0,0 +1,55 @@ + + 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} + + + + + 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..2f4361b8 --- /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.solon.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