重构SSO模块,静态式API改为实例式

This commit is contained in:
click33
2022-10-26 11:42:19 +08:00
parent 39915d2403
commit cfd7a71ca3
28 changed files with 780 additions and 211 deletions

View File

@@ -83,7 +83,7 @@ http://{host}:{port}/sso/checkTicket
### 4、单点注销接口
``` url
http://{host}:{port}/sso/logout
http://{host}:{port}/sso/signout
```
此接口有两种调用方式
@@ -92,7 +92,7 @@ http://{host}:{port}/sso/logout
例如:
``` url
http://{host}:{port}/sso/logout?back=xxx
http://{host}:{port}/sso/signout?back=xxx
```
用户注销成功后将返回 back 地址
@@ -109,7 +109,7 @@ http://{host}:{port}/sso/logout?back=xxx
例如:
``` url
http://{host}:{port}/sso/logout?loginId={value}&timestamp={value}&nonce={value}&sign={value}
http://{host}:{port}/sso/signout?loginId={value}&timestamp={value}&nonce={value}&sign={value}
```
将返回 json 数据结果,形如:

View File

@@ -15,7 +15,7 @@ public class SsoServerController {
// SSO-Server端处理所有SSO相关请求
@RequestMapping("/sso/*")
public Object ssoRequest() {
return SaSsoHandle.serverRequest();
return SaSsoProcessor.instance.serverDister();
}
// ... 其它代码
@@ -25,8 +25,9 @@ public class SsoServerController {
这种写法集成简单但却不够灵活。例如认证中心地址只能是:`http://{host}:{port}/sso/auth`如果我们想要自定义其API地址应该怎么做呢
我们可以打开SSO模块相关源码有关 API 的设计都定义在:[SaSsoConsts.java](https://gitee.com/dromara/sa-token/blob/master/sa-token-plugin/sa-token-sso/src/main/java/cn/dev33/satoken/sso/SaSsoConsts.java)
中,这些值从架构设计上来讲属于常量却并未使用 `final` 修饰,目的就是为了方便我们对其二次修改。
打开SSO模块相关源码有关 API 的设计都定义在:
[ApiName.java](https://gitee.com/dromara/sa-token/blob/master/sa-token-plugin/sa-token-sso/src/main/java/cn/dev33/satoken/sso/name/ApiName.java)
中,我们可以对其进行二次修改。
例如,我们可以在 Main 方法启动类或者 SSO 配置方法中修改变量值:
``` java
@@ -34,7 +35,7 @@ public class SsoServerController {
@Autowired
private void configSso(SaSsoConfig sso) {
// 自定义API地址
SaSsoConsts.Api.ssoAuth = "/sso/auth2";
SaSsoUtil.ssoTemplate.apiName.ssoAuth = "/sso/auth2";
// ...
// SSO 相关配置
@@ -60,25 +61,25 @@ public class SsoServerController {
// SSO-Server统一认证地址
@RequestMapping("/sso/auth")
public Object ssoAuth() {
return SaSsoHandle.ssoAuth();
return SaSsoProcessor.instance.ssoAuth();
}
// SSO-ServerRestAPI 登录接口
@RequestMapping("/sso/doLogin")
public Object ssoDoLogin() {
return SaSsoHandle.ssoDoLogin();
return SaSsoProcessor.instance.ssoDoLogin();
}
// SSO-Server校验ticket 获取账号id
@RequestMapping("/sso/checkTicket")
public Object ssoCheckTicket() {
return SaSsoHandle.ssoCheckTicket();
return SaSsoProcessor.instance.ssoCheckTicket();
}
// SSO-Server单点注销
@RequestMapping("/sso/logout")
public Object ssoLogout() {
return SaSsoHandle.ssoServerLogout();
@RequestMapping("/sso/signout")
public Object ssoSignout() {
return SaSsoProcessor.instance.ssoSignout();
}
// ... 其它方法

View File

@@ -30,7 +30,7 @@ public class H5Controller {
// 根据ticket进行登录
@RequestMapping("/sso/doLoginByTicket")
public SaResult doLoginByTicket(String ticket) {
Object loginId = SaSsoHandle.checkTicket(ticket, "/sso/doLoginByTicket");
Object loginId = SaSsoProcessor.instance.checkTicket(ticket, "/sso/doLoginByTicket");
if(loginId != null) {
StpUtil.login(loginId);
return SaResult.data(StpUtil.getTokenValue());

View File

@@ -75,7 +75,7 @@ public Object ssoRequest() {
if(req.isPath("/sso/auth") && req.hasParam("redirect") == false && StpUtil.isLogin()) {
return SaHolder.getResponse().redirect("/home");
}
return SaSsoHandle.serverRequest();
return SaSsoProcessor.instance.serverDister();
}
```

View File

@@ -95,7 +95,7 @@ public class SsoServerController {
*/
@RequestMapping("/sso/*")
public Object ssoRequest() {
return SaSsoHandle.serverRequest();
return SaSsoProcessor.instance.serverDister();
}
/**

View File

@@ -170,7 +170,7 @@ sa-token:
# SSO-Server端-单点登录授权地址
auth-url: http://sso.stp.com:9000/sso/auth
# SSO-Server端-单点注销地址
slo-url: http://sso.stp.com:9000/sso/logout
slo-url: http://sso.stp.com:9000/sso/signout
# 配置 Sa-Token 单独使用的Redis连接 此处需要和SSO-Server端连接同一个Redis
alone-redis:
@@ -195,7 +195,7 @@ server.port=9001
# SSO-Server端-单点登录授权地址
sa-token.sso.auth-url=http://sso.stp.com:9000/sso/auth
# SSO-Server端-单点注销地址
sa-token.sso.slo-url=http://sso.stp.com:9000/sso/logout
sa-token.sso.slo-url=http://sso.stp.com:9000/sso/signout
# 配置 Sa-Token 单独使用的Redis连接 此处需要和SSO-Server端连接同一个Redis
# Redis数据库索引
@@ -219,9 +219,9 @@ sa-token.alone-redis.timeout=10s
* SSO模式一Client端 Demo
*/
@SpringBootApplication
public class SaSsoClientApplication {
public class SaSso1ClientApplication {
public static void main(String[] args) {
SpringApplication.run(SaSsoClientApplication.class, args);
SpringApplication.run(SaSso1ClientApplication.class, args);
System.out.println("\nSa-Token SSO模式一 Client端启动成功");
}
}

View File

@@ -151,7 +151,7 @@ public class SsoClientController {
*/
@RequestMapping("/sso/*")
public Object ssoRequest() {
return SaSsoHandle.clientRequest();
return SaSsoProcessor.instance.clientDister();
}
}
@@ -220,9 +220,9 @@ sa-token.alone-redis.timeout=10s
#### 3.5、写启动类
``` java
@SpringBootApplication
public class SaSsoClientApplication {
public class SaSso2ClientApplication {
public static void main(String[] args) {
SpringApplication.run(SaSsoClientApplication.class, args);
SpringApplication.run(SaSso2ClientApplication.class, args);
System.out.println("\nSa-Token-SSO Client端启动成功");
}
}

View File

@@ -236,7 +236,7 @@ sa-token:
# 打开单点注销功能
is-slo: true
# 单点注销地址
slo-url: http://sa-sso-server.com:9000/sso/logout
slo-url: http://sa-sso-server.com:9000/sso/signout
# 接口调用秘钥
secretkey: kQwIOrYvnXmSDkwEiFngrKidMcdrgKor
```
@@ -245,7 +245,7 @@ sa-token:
# 打开单点注销功能
sa-token.sso.is-slo=true
# 单点注销地址
sa-token.sso.slo-url=http://sa-sso-server.com:9000/sso/logout
sa-token.sso.slo-url=http://sa-sso-server.com:9000/sso/signout
# 接口调用秘钥
sa-token.sso.secretkey=kQwIOrYvnXmSDkwEiFngrKidMcdrgKor
```