整体重构 sa-token-sso 模块,将 server 端和 client 端代码拆分

This commit is contained in:
click33
2024-04-30 08:34:30 +08:00
parent 32157cc389
commit 08659f1fa8
49 changed files with 2441 additions and 1974 deletions

View File

@@ -1,8 +1,8 @@
package com.pj.h5;
import cn.dev33.satoken.sso.SaSsoConsts;
import cn.dev33.satoken.sso.SaSsoUtil;
import cn.dev33.satoken.sso.util.SaSsoConsts;
import cn.dev33.satoken.sso.template.SaSsoUtil;
import cn.dev33.satoken.stp.StpUtil;
import cn.dev33.satoken.util.SaFoxUtil;
import cn.dev33.satoken.util.SaResult;

View File

@@ -1,8 +1,8 @@
package com.pj.sso;
import cn.dev33.satoken.config.SaSsoConfig;
import cn.dev33.satoken.dao.SaTokenDao;
import cn.dev33.satoken.dao.SaTokenDaoOfRedis;
import cn.dev33.satoken.sso.config.SaSsoServerConfig;
import cn.dev33.satoken.stp.StpUtil;
import cn.dev33.satoken.util.SaResult;
import com.dtflys.forest.Forest;
@@ -27,15 +27,15 @@ public class SsoConfig {
// 配置SSO相关参数
@Bean
public void configSso(SaSsoConfig sso) { //SaSsoConfig 已自动构建
public void configSso(SaSsoServerConfig ssoServer) { //SaSsoConfig 已自动构建
// 配置未登录时返回的View
sso.notLoginView = () -> {
ssoServer.notLoginView = () -> {
return new ModelAndView("sa-login.html");
};
// 配置:登录处理函数
sso.doLoginHandle = (name, pwd) -> {
ssoServer.doLoginHandle = (name, pwd) -> {
// 此处仅做模拟登录,真实环境应该查询数据进行登录
if("sa".equals(name) && "123456".equals(pwd)) {
StpUtil.login(10001);
@@ -45,7 +45,7 @@ public class SsoConfig {
};
// 配置 Http 请求处理器 (在模式三的单点注销功能下用到,如不需要可以注释掉)
sso.sendHttp = url -> {
ssoServer.sendHttp = url -> {
try {
// 发起 http 请求
System.out.println("------ 发起请求:" + url);

View File

@@ -1,7 +1,7 @@
package com.pj.sso;
import cn.dev33.satoken.sso.SaSsoProcessor;
import cn.dev33.satoken.sso.processor.SaSsoServerProcessor;
import org.noear.solon.annotation.Controller;
import org.noear.solon.annotation.Mapping;
@@ -22,6 +22,6 @@ public class SsoServerController {
*/
@Mapping("/sso/*")
public Object ssoRequest() {
return SaSsoProcessor.instance.serverDister();
return SaSsoServerProcessor.instance.dister();
}
}

View File

@@ -10,7 +10,7 @@ sa-token:
# domain: stp.com
# ------- SSO-模式二相关配置
sso:
sso-server:
# Ticket有效期 (单位: 秒),默认五分钟
ticket-timeout: 300
# 所有允许的授权回调地址
@@ -22,7 +22,8 @@ sa-token:
# 是否打开模式三
isHttp: true
# 接口调用秘钥用于SSO模式三的单点注销功能
secretkey: kQwIOrYvnXmSDkwEiFngrKidMcdrgKor
sign:
secret-key: kQwIOrYvnXmSDkwEiFngrKidMcdrgKor
# ---- 除了以上配置项,你还需要为 Sa-Token 配置http请求处理器文档有步骤说明
sa-token: #名字可以随意取

View File

@@ -21,8 +21,8 @@ public class SsoClientController implements Render {
@Produces(MimeType.TEXT_HTML_VALUE)
@Mapping("/")
public String index() {
String authUrl = SaSsoManager.getConfig().splicingAuthUrl();
String solUrl = SaSsoManager.getConfig().splicingSloUrl();
String authUrl = SaSsoManager.getClientConfig().splicingAuthUrl();
String solUrl = SaSsoManager.getClientConfig().splicingSloUrl();
String str = "<h2>Sa-Token SSO-Client 应用端</h2>" +
"<p>当前会话是否登录:" + StpUtil.isLogin() + "</p>" +
"<p><a href=\"javascript:location.href='" + authUrl + "?mode=simple&redirect=' + encodeURIComponent(location.href);\">登录</a> " +

View File

@@ -5,7 +5,7 @@ server:
# Sa-Token 配置
sa-token:
# SSO-相关配置
sso:
sso-client:
# SSO-Server端-单点登录授权地址
auth-url: http://sso.stp.com:9000/sso/auth
# SSO-Server端-单点注销地址

View File

@@ -1,7 +1,7 @@
package com.pj.h5;
import cn.dev33.satoken.sso.SaSsoProcessor;
import cn.dev33.satoken.sso.SaSsoUtil;
import cn.dev33.satoken.sso.processor.SaSsoClientProcessor;
import cn.dev33.satoken.sso.template.SaSsoUtil;
import cn.dev33.satoken.stp.StpUtil;
import cn.dev33.satoken.util.SaResult;
import org.noear.solon.annotation.Controller;
@@ -34,7 +34,7 @@ public class H5Controller implements Render {
// 根据ticket进行登录
@Mapping("/sso/doLoginByTicket")
public SaResult doLoginByTicket(String ticket) {
Object loginId = SaSsoProcessor.instance.checkTicket(ticket, "/sso/doLoginByTicket");
Object loginId = SaSsoClientProcessor.instance.checkTicketByMode2Or3(ticket, "/sso/doLoginByTicket");
if(loginId != null) {
StpUtil.login(loginId);
return SaResult.data(StpUtil.getTokenValue());

View File

@@ -1,7 +1,7 @@
package com.pj.sso;
import cn.dev33.satoken.sso.SaSsoProcessor;
import cn.dev33.satoken.sso.processor.SaSsoClientProcessor;
import cn.dev33.satoken.stp.StpUtil;
import cn.dev33.satoken.util.SaResult;
import org.noear.solon.annotation.Controller;
@@ -37,7 +37,7 @@ public class SsoClientController implements Render {
*/
@Mapping("/sso/*")
public Object ssoRequest() {
return SaSsoProcessor.instance.clientDister();
return SaSsoClientProcessor.instance.dister();
}
// 全局异常拦截并转换

View File

@@ -5,7 +5,7 @@ server:
# sa-token配置
sa-token:
# SSO-相关配置
sso:
sso-client:
# 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

View File

@@ -1,10 +1,9 @@
package com.pj.sso;
import cn.dev33.satoken.config.SaSsoConfig;
import cn.dev33.satoken.sso.SaSsoManager;
import cn.dev33.satoken.sso.SaSsoProcessor;
import cn.dev33.satoken.sso.SaSsoTemplate;
import cn.dev33.satoken.sso.SaSsoUtil;
import cn.dev33.satoken.sso.config.SaSsoClientConfig;
import cn.dev33.satoken.sso.processor.SaSsoClientProcessor;
import cn.dev33.satoken.sso.template.SaSsoClientTemplate;
import org.noear.solon.annotation.Bean;
import org.noear.solon.annotation.Condition;
import org.noear.solon.annotation.Configuration;
@@ -25,7 +24,7 @@ public class SaSsoAutoConfigure {
* 获取 SSO 配置Bean
* */
@Bean
public SaSsoConfig getConfig(@Inject(value = "${sa-token.sso}",required = false) SaSsoConfig ssoConfig) {
public SaSsoClientConfig getConfig(@Inject(value = "${sa-token.sso-client}",required = false) SaSsoClientConfig ssoConfig) {
return ssoConfig;
}
@@ -35,18 +34,17 @@ public class SaSsoAutoConfigure {
* @param saSsoConfig 配置对象
*/
@Bean
public void setSaSsoConfig(@Inject(required = false) SaSsoConfig saSsoConfig) {
SaSsoManager.setConfig(saSsoConfig);
public void setSaSsoConfig(@Inject(required = false) SaSsoClientConfig saSsoConfig) {
SaSsoManager.setClientConfig(saSsoConfig);
}
/**
* 注入 Sa-Token-SSO 单点登录模块 Bean
*
* @param ssoTemplate saSsoTemplate对象
* @param ssoClientTemplate ssoClientTemplate对象
*/
@Bean
public void setSaSsoTemplate(@Inject(required = false) SaSsoTemplate ssoTemplate) {
SaSsoUtil.ssoTemplate = ssoTemplate;
SaSsoProcessor.instance.ssoTemplate = ssoTemplate;
public void setSaSsoClientTemplate(@Inject(required = false) SaSsoClientTemplate ssoClientTemplate) {
SaSsoClientProcessor.instance.ssoClientTemplate = ssoClientTemplate;
}
}

View File

@@ -1,7 +1,7 @@
package com.pj.sso;
import cn.dev33.satoken.sso.SaSsoProcessor;
import cn.dev33.satoken.sso.SaSsoUtil;
import cn.dev33.satoken.sso.processor.SaSsoClientProcessor;
import cn.dev33.satoken.sso.template.SaSsoUtil;
import cn.dev33.satoken.stp.StpUtil;
import cn.dev33.satoken.util.SaResult;
import org.noear.solon.annotation.Controller;
@@ -11,6 +11,9 @@ import org.noear.solon.boot.web.MimeType;
import org.noear.solon.core.handle.Context;
import org.noear.solon.core.handle.Render;
import java.util.HashMap;
import java.util.Map;
/**
* Sa-Token-SSO Client端 Controller
* @author click33
@@ -37,15 +40,21 @@ public class SsoClientController implements Render {
*/
@Mapping("/sso/*")
public Object ssoRequest() {
return SaSsoProcessor.instance.clientDister();
return SaSsoClientProcessor.instance.dister();
}
// 查询我的账号信息
@Mapping("/sso/myinfo")
public Object myinfo() {
Object userinfo = SaSsoUtil.getUserinfo(StpUtil.getLoginId());
System.out.println("--------info" + userinfo);
return userinfo;
@Mapping("/sso/myInfo")
public Object myInfo() {
// 组织请求参数
Map<String, Object> map = new HashMap<>();
map.put("apiType", "userinfo");
map.put("loginId", StpUtil.getLoginId());
// 发起请求
Object resData = SaSsoUtil.getData(map);
System.out.println("sso-server 返回的信息:" + resData);
return resData;
}
// 全局异常拦截并转换

View File

@@ -1,6 +1,6 @@
package com.pj.sso;
import cn.dev33.satoken.config.SaSsoConfig;
import cn.dev33.satoken.sso.config.SaSsoClientConfig;
import com.dtflys.forest.Forest;
import org.noear.solon.annotation.Bean;
import org.noear.solon.annotation.Configuration;
@@ -12,9 +12,9 @@ import org.noear.solon.annotation.Configuration;
public class SsoConfig {
// 配置SSO相关参数
@Bean
private void configSso(SaSsoConfig sso) {
private void configSso(SaSsoClientConfig ssoClient) {
// 配置Http请求处理器
sso.sendHttp = url -> {
ssoClient.sendHttp = url -> {
System.out.println("------ 发起请求:" + url);
return Forest.get(url).executeAsString();
};

View File

@@ -5,7 +5,7 @@ server:
# sa-token配置
sa-token:
# SSO-相关配置
sso:
sso-client:
# SSO-Server端 统一认证地址
auth-url: http://sa-sso-server.com:9000/sso/auth
# 使用Http请求校验ticket