From 6592b625233efa2e6ecfe7827700d850fbd3145e Mon Sep 17 00:00:00 2001
From: click33 <2393584716@qq.com>
Date: Fri, 21 Oct 2022 11:27:29 +0800
Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E6=96=87=E6=A1=A3..?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.gitee/ISSUE_TEMPLATE.md | 2 +-
.github/ISSUE_TEMPLATE.md | 2 +-
README.md | 43 +++++----
.../dev33/satoken/config/SaTokenConfig.java | 2 +-
.../cn/dev33/satoken/util/SaTokenConsts.java | 2 +-
.../sa-token-demo-alone-redis/pom.xml | 2 +-
sa-token-demo/sa-token-demo-case/pom.xml | 2 +-
sa-token-demo/sa-token-demo-jwt/pom.xml | 2 +-
.../sa-token-demo-oauth2-client/pom.xml | 2 +-
.../src/main/resources/templates/index.html | 2 +-
.../sa-token-demo-oauth2-server/pom.xml | 2 +-
.../sa-token-demo-quick-login/pom.xml | 2 +-
sa-token-demo/sa-token-demo-solon/pom.xml | 2 +-
.../sa-token-demo-springboot-redis/pom.xml | 2 +-
.../sa-token-demo-springboot/pom.xml | 2 +-
.../sa-token-demo-sso-server-h5/login.js | 2 +-
.../sa-token-demo-sso-server/pom.xml | 2 +-
.../src/main/resources/static/sa-res/login.js | 2 +-
.../sa-token-demo-sso1-client/pom.xml | 2 +-
.../sa-token-demo-sso2-client/pom.xml | 2 +-
.../sa-token-demo-sso3-client/pom.xml | 2 +-
sa-token-demo/sa-token-demo-test/pom.xml | 2 +-
.../src/main/resources/application.yml | 2 +-
sa-token-demo/sa-token-demo-thymeleaf/pom.xml | 2 +-
sa-token-demo/sa-token-demo-webflux/pom.xml | 2 +-
.../sa-token-demo-websocket-spring/pom.xml | 2 +-
sa-token-demo/sa-token-demo-websocket/pom.xml | 2 +-
sa-token-doc/README.md | 88 ++++++++++---------
sa-token-doc/doc.html | 4 +-
sa-token-doc/index.html | 8 +-
sa-token-doc/micro/gateway-auth.md | 4 +-
sa-token-doc/micro/id-token.md | 8 +-
sa-token-doc/micro/import-intro.md | 8 +-
sa-token-doc/oauth2/oauth2-server.md | 6 +-
sa-token-doc/sso/sso-server.md | 4 +-
sa-token-doc/sso/sso-type1.md | 4 +-
sa-token-doc/sso/sso-type2.md | 4 +-
sa-token-doc/start/download.md | 18 ++--
sa-token-doc/start/example.md | 11 ++-
sa-token-doc/start/new-version.md | 4 +-
sa-token-doc/start/webflux-example.md | 4 +-
sa-token-doc/use/config.md | 6 +-
.../src/main/resources/static/sa-res/login.js | 2 +-
.../core/context/model/SaCookieTest.java | 6 +-
.../satoken/core/util/SaFoxUtilTest.java | 42 ++++-----
45 files changed, 167 insertions(+), 159 deletions(-)
diff --git a/.gitee/ISSUE_TEMPLATE.md b/.gitee/ISSUE_TEMPLATE.md
index 17b29a20..8c2f41de 100644
--- a/.gitee/ISSUE_TEMPLATE.md
+++ b/.gitee/ISSUE_TEMPLATE.md
@@ -1,2 +1,2 @@
请在以下地址复制 issue 模板进行提交:
-https://sa-token.dev33.cn/doc.html#/fun/issue-template
+https://sa-token.cc/doc.html#/fun/issue-template
diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md
index 17b29a20..8c2f41de 100644
--- a/.github/ISSUE_TEMPLATE.md
+++ b/.github/ISSUE_TEMPLATE.md
@@ -1,2 +1,2 @@
请在以下地址复制 issue 模板进行提交:
-https://sa-token.dev33.cn/doc.html#/fun/issue-template
+https://sa-token.cc/doc.html#/fun/issue-template
diff --git a/README.md b/README.md
index 5ae7d794..f1f2d1f4 100644
--- a/README.md
+++ b/README.md
@@ -1,5 +1,5 @@
-
+
Sa-Token v1.31.0
一个轻量级 Java 权限认证框架,让鉴权变得简单、优雅!
@@ -16,7 +16,7 @@
---
## 前言:
-- [在线文档:http://sa-token.dev33.cn/](http://sa-token.dev33.cn/)
+- [在线文档:https://sa-token.cc](https://sa-token.cc)
- 注:学习测试请拉取 master 分支,dev 为正在开发的分支,有很多特性并不稳定。
@@ -27,26 +27,33 @@
**Sa-Token** 是一个轻量级 Java 权限认证框架,主要解决:登录认证、权限认证、单点登录、OAuth2.0、分布式Session会话、微服务网关鉴权 等一系列权限相关问题。
-登录认证示例:
+Sa-Token 旨在以简单、优雅的方式完成系统的权限认证部分,以登录认证为例,你只需要:
``` java
-// 会话登录:参数指定在当前客户端登录的账号id
+// 会话登录,参数填登录人的账号id
StpUtil.login(10001);
-
-// 会话校验:在需要校验登录处调用以下方法,如果会话未登录会抛出 `NotLoginException` 异常
-StpUtil.checkLogin();
-
-// 会话注销:在当前客户端退出已登录的会话
-StpUtil.logout();
```
-踢人下线:
+无需实现任何接口,无需创建任何配置文件,只需要这一句静态代码的调用,便可以完成会话登录认证。
+
+如果一个接口需要登录后才能访问,我们只需调用以下代码:
+
+``` java
+// 校验当前客户端是否已经登录,如果未登录则抛出 `NotLoginException` 异常
+StpUtil.checkLogin();
+```
+
+在 Sa-Token 中,大多数功能都可以一行代码解决:
+
+踢人下线示例:
+
``` java
// 将账号id为 10077 的会话踢下线
StpUtil.kickout(10077);
```
-权限认证示例:
+权限认证:
+
``` java
// 注解鉴权:只有具备 `user:add` 权限的会话才可以进入方法
@SaCheckPermission("user:add")
@@ -70,6 +77,8 @@ registry.addInterceptor(new SaInterceptor(handler -> {
})).addPathPatterns("/**");
```
+当你受够 Shiro、SpringSecurity 等框架的三拜九叩之后,你就会明白,相对于这些传统老牌框架,Sa-Token 的 API 设计是多么的简单、优雅!
+
## Sa-Token 功能模块一览
@@ -115,13 +124,13 @@ Sa-Token-SSO 由简入难划分为三种模式,解决不同架构下的 SSO
| 系统架构 | 采用模式 | 简介 | 文档链接 |
| :-------- | :-------- | :-------- | :-------- |
-| 前端同域 + 后端同 Redis | 模式一 | 共享Cookie同步会话 | [文档](http://sa-token.dev33.cn/doc.html#/sso/sso-type1)、[示例](https://gitee.com/dromara/sa-token/blob/master/sa-token-demo/sa-token-demo-sso1-client) |
-| 前端不同域 + 后端同 Redis | 模式二 | URL重定向传播会话 | [文档](http://sa-token.dev33.cn/doc.html#/sso/sso-type2)、[示例](https://gitee.com/dromara/sa-token/blob/master/sa-token-demo/sa-token-demo-sso2-client) |
-| 前端不同域 + 后端 不同Redis | 模式三 | Http请求获取会话 | [文档](http://sa-token.dev33.cn/doc.html#/sso/sso-type3)、[示例](https://gitee.com/dromara/sa-token/blob/master/sa-token-demo/sa-token-demo-sso3-client) |
+| 前端同域 + 后端同 Redis | 模式一 | 共享Cookie同步会话 | [文档](https://sa-token.cc/doc.html#/sso/sso-type1)、[示例](https://gitee.com/dromara/sa-token/blob/master/sa-token-demo/sa-token-demo-sso1-client) |
+| 前端不同域 + 后端同 Redis | 模式二 | URL重定向传播会话 | [文档](https://sa-token.cc/doc.html#/sso/sso-type2)、[示例](https://gitee.com/dromara/sa-token/blob/master/sa-token-demo/sa-token-demo-sso2-client) |
+| 前端不同域 + 后端 不同Redis | 模式三 | Http请求获取会话 | [文档](https://sa-token.cc/doc.html#/sso/sso-type3)、[示例](https://gitee.com/dromara/sa-token/blob/master/sa-token-demo/sa-token-demo-sso3-client) |
1. 前端同域:就是指多个系统可以部署在同一个主域名之下,比如:`c1.domain.com`、`c2.domain.com`、`c3.domain.com`
-2. 后端同Redis:就是指多个系统可以连接同一个Redis。PS:这里并不需要把所有项目的数据都放在同一个Redis中,Sa-Token提供了 **`[权限缓存与业务缓存分离]`** 的解决方案,详情戳:[Alone独立Redis插件](http://sa-token.dev33.cn/doc.html#/plugin/alone-redis)
+2. 后端同Redis:就是指多个系统可以连接同一个Redis。PS:这里并不需要把所有项目的数据都放在同一个Redis中,Sa-Token提供了 **`[权限缓存与业务缓存分离]`** 的解决方案,详情戳:[Alone独立Redis插件](https://sa-token.cc/doc.html#/plugin/alone-redis)
3. 如果既无法做到前端同域,也无法做到后端同Redis,那么只能走模式三,Http请求获取会话(Sa-Token对SSO提供了完整的封装,你只需要按照示例从文档上复制几段代码便可以轻松集成)
## Sa-Token-OAuth2 授权认证
@@ -134,7 +143,7 @@ Sa-OAuth2 模块分为四种授权模式,解决不同场景下的授权需求
| 密码式(Password) | Client直接拿着用户的账号密码换取授权 Token |
| 客户端凭证(Client Credentials)| Server 端针对 Client 级别的 Token,代表应用自身的资源授权 |
-详细参考文档:[http://sa-token.dev33.cn/doc.html#/oauth2/readme](http://sa-token.dev33.cn/doc.html#/oauth2/readme)
+详细参考文档:[https://sa-token.cc/doc.html#/oauth2/readme](https://sa-token.cc/doc.html#/oauth2/readme)
## 使用 Sa-Token 的开源项目
diff --git a/sa-token-core/src/main/java/cn/dev33/satoken/config/SaTokenConfig.java b/sa-token-core/src/main/java/cn/dev33/satoken/config/SaTokenConfig.java
index 48b6ac71..068a4eb2 100644
--- a/sa-token-core/src/main/java/cn/dev33/satoken/config/SaTokenConfig.java
+++ b/sa-token-core/src/main/java/cn/dev33/satoken/config/SaTokenConfig.java
@@ -5,7 +5,7 @@ import java.io.Serializable;
/**
* Sa-Token 配置类 Model
*
- * 你可以通过yml、properties、java代码等形式配置本类参数,具体请查阅官方文档: http://sa-token.dev33.cn/
+ * 你可以通过yml、properties、java代码等形式配置本类参数,具体请查阅官方文档: https://sa-token.cc/
*
* @author kong
*
diff --git a/sa-token-core/src/main/java/cn/dev33/satoken/util/SaTokenConsts.java b/sa-token-core/src/main/java/cn/dev33/satoken/util/SaTokenConsts.java
index ad45165d..59af034c 100644
--- a/sa-token-core/src/main/java/cn/dev33/satoken/util/SaTokenConsts.java
+++ b/sa-token-core/src/main/java/cn/dev33/satoken/util/SaTokenConsts.java
@@ -30,7 +30,7 @@ public class SaTokenConsts {
/**
* Sa-Token 开发文档地址
*/
- public static final String DEV_DOC_URL = "http://sa-token.dev33.cn";
+ public static final String DEV_DOC_URL = "https://sa-token.cc";
// =================== 常量key标记 ===================
diff --git a/sa-token-demo/sa-token-demo-alone-redis/pom.xml b/sa-token-demo/sa-token-demo-alone-redis/pom.xml
index 4770482a..18112cde 100644
--- a/sa-token-demo/sa-token-demo-alone-redis/pom.xml
+++ b/sa-token-demo/sa-token-demo-alone-redis/pom.xml
@@ -31,7 +31,7 @@
spring-boot-starter-aop
-
+
cn.dev33
sa-token-spring-boot-starter
diff --git a/sa-token-demo/sa-token-demo-case/pom.xml b/sa-token-demo/sa-token-demo-case/pom.xml
index ed81e8c5..fc713fb2 100644
--- a/sa-token-demo/sa-token-demo-case/pom.xml
+++ b/sa-token-demo/sa-token-demo-case/pom.xml
@@ -32,7 +32,7 @@
spring-boot-starter-aop
-
+
cn.dev33
sa-token-spring-boot-starter
diff --git a/sa-token-demo/sa-token-demo-jwt/pom.xml b/sa-token-demo/sa-token-demo-jwt/pom.xml
index dac7baec..d0b5b6a0 100644
--- a/sa-token-demo/sa-token-demo-jwt/pom.xml
+++ b/sa-token-demo/sa-token-demo-jwt/pom.xml
@@ -27,7 +27,7 @@
spring-boot-starter-web
-
+
cn.dev33
sa-token-spring-boot-starter
diff --git a/sa-token-demo/sa-token-demo-oauth2-client/pom.xml b/sa-token-demo/sa-token-demo-oauth2-client/pom.xml
index 6aa42c0b..eef67c6e 100644
--- a/sa-token-demo/sa-token-demo-oauth2-client/pom.xml
+++ b/sa-token-demo/sa-token-demo-oauth2-client/pom.xml
@@ -28,7 +28,7 @@
spring-boot-starter-web
-
+
cn.dev33
sa-token-spring-boot-starter
diff --git a/sa-token-demo/sa-token-demo-oauth2-client/src/main/resources/templates/index.html b/sa-token-demo/sa-token-demo-oauth2-client/src/main/resources/templates/index.html
index 9d5b3121..9bcfde53 100644
--- a/sa-token-demo/sa-token-demo-oauth2-client/src/main/resources/templates/index.html
+++ b/sa-token-demo/sa-token-demo-oauth2-client/src/main/resources/templates/index.html
@@ -91,7 +91,7 @@
更多资料请参考 Sa-Token 官方文档地址:
- http://sa-token.dev33.cn/
+ https://sa-token.cc/
diff --git a/sa-token-demo/sa-token-demo-oauth2-server/pom.xml b/sa-token-demo/sa-token-demo-oauth2-server/pom.xml
index 0acb237b..a4e8beb9 100644
--- a/sa-token-demo/sa-token-demo-oauth2-server/pom.xml
+++ b/sa-token-demo/sa-token-demo-oauth2-server/pom.xml
@@ -28,7 +28,7 @@
spring-boot-starter-web
-
+
cn.dev33
sa-token-spring-boot-starter
diff --git a/sa-token-demo/sa-token-demo-quick-login/pom.xml b/sa-token-demo/sa-token-demo-quick-login/pom.xml
index 2d1a05ac..42e01ad3 100644
--- a/sa-token-demo/sa-token-demo-quick-login/pom.xml
+++ b/sa-token-demo/sa-token-demo-quick-login/pom.xml
@@ -27,7 +27,7 @@
spring-boot-starter-web
-
+
cn.dev33
sa-token-spring-boot-starter
diff --git a/sa-token-demo/sa-token-demo-solon/pom.xml b/sa-token-demo/sa-token-demo-solon/pom.xml
index 970ddb34..26c88b5c 100644
--- a/sa-token-demo/sa-token-demo-solon/pom.xml
+++ b/sa-token-demo/sa-token-demo-solon/pom.xml
@@ -21,7 +21,7 @@
1.10.4
-
+
cn.dev33
sa-token-solon-plugin
diff --git a/sa-token-demo/sa-token-demo-springboot-redis/pom.xml b/sa-token-demo/sa-token-demo-springboot-redis/pom.xml
index 2fefd3c9..49fa16a4 100644
--- a/sa-token-demo/sa-token-demo-springboot-redis/pom.xml
+++ b/sa-token-demo/sa-token-demo-springboot-redis/pom.xml
@@ -32,7 +32,7 @@
spring-boot-starter-aop
-
+
cn.dev33
sa-token-spring-boot-starter
diff --git a/sa-token-demo/sa-token-demo-springboot/pom.xml b/sa-token-demo/sa-token-demo-springboot/pom.xml
index f52afcb2..b5fdd415 100644
--- a/sa-token-demo/sa-token-demo-springboot/pom.xml
+++ b/sa-token-demo/sa-token-demo-springboot/pom.xml
@@ -32,7 +32,7 @@
spring-boot-starter-aop
-
+
cn.dev33
sa-token-spring-boot-starter
diff --git a/sa-token-demo/sa-token-demo-sso-server-h5/login.js b/sa-token-demo/sa-token-demo-sso-server-h5/login.js
index 0b87ab7c..e43a4f48 100644
--- a/sa-token-demo/sa-token-demo-sso-server-h5/login.js
+++ b/sa-token-demo/sa-token-demo-sso-server-h5/login.js
@@ -98,5 +98,5 @@ function getParam(name, defaultValue){
}
// 打印信息
-var str = "This page is provided by Sa-Token, Please refer to: " + "http://sa-token.dev33.cn/";
+var str = "This page is provided by Sa-Token, Please refer to: " + "https://sa-token.cc/";
console.log(str);
diff --git a/sa-token-demo/sa-token-demo-sso-server/pom.xml b/sa-token-demo/sa-token-demo-sso-server/pom.xml
index ce7fd481..8f8fcea6 100644
--- a/sa-token-demo/sa-token-demo-sso-server/pom.xml
+++ b/sa-token-demo/sa-token-demo-sso-server/pom.xml
@@ -27,7 +27,7 @@
spring-boot-starter-web
-
+
cn.dev33
sa-token-spring-boot-starter
diff --git a/sa-token-demo/sa-token-demo-sso-server/src/main/resources/static/sa-res/login.js b/sa-token-demo/sa-token-demo-sso-server/src/main/resources/static/sa-res/login.js
index f581ee78..e474f430 100644
--- a/sa-token-demo/sa-token-demo-sso-server/src/main/resources/static/sa-res/login.js
+++ b/sa-token-demo/sa-token-demo-sso-server/src/main/resources/static/sa-res/login.js
@@ -61,5 +61,5 @@ $('[name=name],[name=pwd]').bind('keypress', function(event){
$("[name=name]").focus();
// 打印信息
-var str = "This page is provided by Sa-Token, Please refer to: " + "http://sa-token.dev33.cn/";
+var str = "This page is provided by Sa-Token, Please refer to: " + "https://sa-token.cc/";
console.log(str);
diff --git a/sa-token-demo/sa-token-demo-sso1-client/pom.xml b/sa-token-demo/sa-token-demo-sso1-client/pom.xml
index 3d02ec19..afac6355 100644
--- a/sa-token-demo/sa-token-demo-sso1-client/pom.xml
+++ b/sa-token-demo/sa-token-demo-sso1-client/pom.xml
@@ -27,7 +27,7 @@
spring-boot-starter-web
-
+
cn.dev33
sa-token-spring-boot-starter
diff --git a/sa-token-demo/sa-token-demo-sso2-client/pom.xml b/sa-token-demo/sa-token-demo-sso2-client/pom.xml
index 2c0ec337..5aa3882c 100644
--- a/sa-token-demo/sa-token-demo-sso2-client/pom.xml
+++ b/sa-token-demo/sa-token-demo-sso2-client/pom.xml
@@ -27,7 +27,7 @@
spring-boot-starter-web
-
+
cn.dev33
sa-token-spring-boot-starter
diff --git a/sa-token-demo/sa-token-demo-sso3-client/pom.xml b/sa-token-demo/sa-token-demo-sso3-client/pom.xml
index dabc819d..365eaa7c 100644
--- a/sa-token-demo/sa-token-demo-sso3-client/pom.xml
+++ b/sa-token-demo/sa-token-demo-sso3-client/pom.xml
@@ -27,7 +27,7 @@
spring-boot-starter-web
-
+
cn.dev33
sa-token-spring-boot-starter
diff --git a/sa-token-demo/sa-token-demo-test/pom.xml b/sa-token-demo/sa-token-demo-test/pom.xml
index d8db946a..b4c7e569 100644
--- a/sa-token-demo/sa-token-demo-test/pom.xml
+++ b/sa-token-demo/sa-token-demo-test/pom.xml
@@ -32,7 +32,7 @@
spring-boot-starter-aop
-
+
cn.dev33
sa-token-spring-boot-starter
diff --git a/sa-token-demo/sa-token-demo-test/src/main/resources/application.yml b/sa-token-demo/sa-token-demo-test/src/main/resources/application.yml
index cb63067a..b38fe0af 100644
--- a/sa-token-demo/sa-token-demo-test/src/main/resources/application.yml
+++ b/sa-token-demo/sa-token-demo-test/src/main/resources/application.yml
@@ -2,7 +2,7 @@
server:
port: 8081
-# sa-token配置
+############## Sa-Token 配置 (文档: https://sa-token.cc) ##############
sa-token:
# token名称 (同时也是cookie名称)
token-name: satoken
diff --git a/sa-token-demo/sa-token-demo-thymeleaf/pom.xml b/sa-token-demo/sa-token-demo-thymeleaf/pom.xml
index e11b5134..de1c725d 100644
--- a/sa-token-demo/sa-token-demo-thymeleaf/pom.xml
+++ b/sa-token-demo/sa-token-demo-thymeleaf/pom.xml
@@ -37,7 +37,7 @@
spring-boot-starter-thymeleaf
-
+
cn.dev33
sa-token-spring-boot-starter
diff --git a/sa-token-demo/sa-token-demo-webflux/pom.xml b/sa-token-demo/sa-token-demo-webflux/pom.xml
index 784bb3e0..e3f7d5ad 100644
--- a/sa-token-demo/sa-token-demo-webflux/pom.xml
+++ b/sa-token-demo/sa-token-demo-webflux/pom.xml
@@ -31,7 +31,7 @@
spring-boot-starter-aop
-
+
cn.dev33
sa-token-reactor-spring-boot-starter
diff --git a/sa-token-demo/sa-token-demo-websocket-spring/pom.xml b/sa-token-demo/sa-token-demo-websocket-spring/pom.xml
index e9f4a5e4..5978ac6b 100644
--- a/sa-token-demo/sa-token-demo-websocket-spring/pom.xml
+++ b/sa-token-demo/sa-token-demo-websocket-spring/pom.xml
@@ -38,7 +38,7 @@
spring-boot-starter-websocket
-
+
cn.dev33
sa-token-spring-boot-starter
diff --git a/sa-token-demo/sa-token-demo-websocket/pom.xml b/sa-token-demo/sa-token-demo-websocket/pom.xml
index f64edcf6..558905e6 100644
--- a/sa-token-demo/sa-token-demo-websocket/pom.xml
+++ b/sa-token-demo/sa-token-demo-websocket/pom.xml
@@ -38,7 +38,7 @@
spring-boot-starter-websocket
-
+
cn.dev33
sa-token-spring-boot-starter
diff --git a/sa-token-doc/README.md b/sa-token-doc/README.md
index 83c6b963..a3b1e62a 100644
--- a/sa-token-doc/README.md
+++ b/sa-token-doc/README.md
@@ -1,5 +1,5 @@
-
+
Sa-Token v1.31.0
一个轻量级 Java 权限认证框架,让鉴权变得简单、优雅!
@@ -16,7 +16,7 @@
---
## 前言:️️
-为了保证新同学不迷路,请允许我唠叨一下:无论您从何处看到本篇文章,最新开发文档永远在:[http://sa-token.dev33.cn/](http://sa-token.dev33.cn/),
+为了保证新同学不迷路,请允许我唠叨一下:无论您从何处看到本篇文章,最新开发文档永远在:[https://sa-token.cc](https://sa-token.cc),
建议收藏在浏览器书签,如果您已经身处本网站下,则请忽略此条说明。
本文档将会尽力讲解每个功能的设计原因、应用场景,用心阅读文档,你学习到的将不止是 `Sa-Token` 框架本身,更是绝大多数场景下权限设计的最佳实践。
@@ -27,71 +27,68 @@
**Sa-Token** 是一个轻量级 Java 权限认证框架,主要解决:**登录认证**、**权限认证**、**单点登录**、**OAuth2.0**、**分布式Session会话**、**微服务网关鉴权**
等一系列权限相关问题。
-Sa-Token 的 API 设计非常简单,有多简单呢?以登录认证为例,你只需要:
+Sa-Token 旨在以简单、优雅的方式完成系统的权限认证部分,以登录认证为例,你只需要:
``` java
-// 在登录时写入当前会话的账号id
+// 会话登录,参数填登录人的账号id
StpUtil.login(10001);
+```
-// 然后在需要校验登录处调用以下方法:
-// 如果当前会话未登录,这句代码会抛出 `NotLoginException` 异常
+无需实现任何接口,无需创建任何配置文件,只需要这一句静态代码的调用,便可以完成会话登录认证。
+
+如果一个接口需要登录后才能访问,我们只需调用以下代码:
+
+``` java
+// 校验当前客户端是否已经登录,如果未登录则抛出 `NotLoginException` 异常
StpUtil.checkLogin();
```
-至此,我们已经借助 Sa-Token 完成登录认证!
+在 Sa-Token 中,大多数功能都可以一行代码解决:
-此时的你小脑袋可能飘满了问号,就这么简单?自定义 Realm 呢?全局过滤器呢?我不用写各种配置文件吗?
+踢人下线示例:
-没错,在 Sa-Token 中,登录认证就是如此简单,不需要任何的复杂前置工作,只需这一行简单的API调用,就可以完成会话登录认证!
-
-当你受够 Shiro、SpringSecurity 等框架的三拜九叩之后,你就会明白,相对于这些传统老牌框架,Sa-Token 的 API 设计是多么的简单、优雅!
-
-权限认证示例(只有具备 `user:add` 权限的会话才可以进入请求)
``` java
+// 将账号id为 10077 的会话踢下线
+StpUtil.kickout(10077);
+```
+
+权限认证:
+
+``` java
+// 注解鉴权:只有具备 `user:add` 权限的会话才可以进入方法
@SaCheckPermission("user:add")
-@RequestMapping("/user/insert")
public String insert(SysUser user) {
- // ...
- return "用户增加";
+ // ...
+ return "用户增加";
}
```
-将某个账号踢下线(待到对方再次访问系统时会抛出`NotLoginException`异常)
+路由拦截鉴权:
+
``` java
-// 将账号id为 10001 的会话踢下线
-StpUtil.kickout(10001);
+// 根据路由划分模块,不同模块不同鉴权
+registry.addInterceptor(new SaInterceptor(handler -> {
+ SaRouter.match("/user/**", r -> StpUtil.checkPermission("user"));
+ SaRouter.match("/admin/**", r -> StpUtil.checkPermission("admin"));
+ SaRouter.match("/goods/**", r -> StpUtil.checkPermission("goods"));
+ SaRouter.match("/orders/**", r -> StpUtil.checkPermission("orders"));
+ SaRouter.match("/notice/**", r -> StpUtil.checkPermission("notice"));
+ // 更多模块...
+})).addPathPatterns("/**");
```
-在 Sa-Token 中,绝大多数功能都可以 **一行代码** 完成:
-``` java
-StpUtil.login(10001); // 标记当前会话登录的账号id
-StpUtil.getLoginId(); // 获取当前会话登录的账号id
-StpUtil.isLogin(); // 获取当前会话是否已经登录, 返回true或false
-StpUtil.logout(); // 当前会话注销登录
-StpUtil.kickout(10001); // 将账号为10001的会话踢下线
-StpUtil.hasRole("super-admin"); // 查询当前账号是否含有指定角色标识, 返回true或false
-StpUtil.hasPermission("user:add"); // 查询当前账号是否含有指定权限, 返回true或false
-StpUtil.getSession(); // 获取当前账号id的Session
-StpUtil.getSessionByLoginId(10001); // 获取账号id为10001的Session
-StpUtil.getTokenValueByLoginId(10001); // 获取账号id为10001的token令牌值
-StpUtil.login(10001, "PC"); // 指定设备类型登录,常用于“同端互斥登录”
-StpUtil.kickout(10001, "PC"); // 指定账号指定设备类型踢下线 (不同端不受影响)
-StpUtil.openSafe(120); // 在当前会话开启二级认证,有效期为120秒
-StpUtil.checkSafe(); // 校验当前会话是否处于二级认证有效期内,校验失败会抛出异常
-StpUtil.switchTo(10044); // 将当前会话身份临时切换为其它账号
-```
-
-即使不运行测试,相信您也能意会到绝大多数 API 的用法。
-
+当你受够 Shiro、SpringSecurity 等框架的三拜九叩之后,你就会明白,相对于这些传统老牌框架,Sa-Token 的 API 设计是多么的简单、优雅!
## Sa-Token 功能一览
+Sa-Token 目前主要五大功能模块:登录认证、权限认证、单点登录、OAuth2.0、微服务鉴权。
+
- **登录认证** —— 单端登录、多端登录、同端互斥登录、七天内免登录
- **权限认证** —— 权限认证、角色认证、会话二级认证
- **Session会话** —— 全端共享Session、单端独享Session、自定义Session
- **踢人下线** —— 根据账号id踢人下线、根据Token值踢人下线
-- **账号封禁** —— 指定天数封禁、永久封禁、设定解封时间
+- **账号封禁** —— 登录封禁、按照业务分类封禁、按照处罚阶梯封禁
- **持久层扩展** —— 可集成Redis、Memcached等专业缓存中间件,重启数据不丢失
- **分布式会话** —— 提供jwt集成、共享数据中心两种分布式会话方案
- **微服务网关鉴权** —— 适配Gateway、ShenYu、Zuul等常见网关的路由拦截认证
@@ -100,13 +97,13 @@ StpUtil.switchTo(10044); // 将当前会话身份临时切换为其它账号
- **二级认证** —— 在已登录的基础上再次认证,保证安全性
- **Basic认证** —— 一行代码接入 Http Basic 认证
- **独立Redis** —— 将权限缓存与业务缓存分离
-- **临时Token验证** —— 解决短时间的Token授权问题
+- **临时Token认证** —— 解决短时间的Token授权问题
- **模拟他人账号** —— 实时操作任意用户状态数据
- **临时身份切换** —— 将会话身份临时切换为其它账号
- **前后台分离** —— APP、小程序等不支持Cookie的终端
- **同端互斥登录** —— 像QQ一样手机电脑同时在线,但是两个手机上互斥登录
- **多账号认证体系** —— 比如一个商城项目的user表和admin表分开鉴权
-- **花式token生成** —— 内置六种Token风格,还可:自定义Token生成策略、自定义Token前缀
+- **Token风格定制** —— 内置六种Token风格,还可:自定义Token生成策略、自定义Token前缀
- **注解式鉴权** —— 优雅的将鉴权与业务代码分离
- **路由拦截式鉴权** —— 根据路由拦截鉴权,可适配restful模式
- **自动续签** —— 提供两种Token过期策略,灵活搭配使用,还可自动续签
@@ -117,6 +114,10 @@ StpUtil.switchTo(10044); // 将当前会话身份临时切换为其它账号
- **开箱即用** —— 提供SpringMVC、WebFlux等常见web框架starter集成包,真正的开箱即用
- **更多功能正在集成中...** —— 如有您有好想法或者建议,欢迎加群交流
+功能结构图:
+
+
+
## 开源仓库 Star 趋势
@@ -133,6 +134,7 @@ StpUtil.switchTo(10044); // 将当前会话身份临时切换为其它账号
参考:[Sa-Token 生态](/more/link)
+
## 交流群
QQ交流群:614714762 [点击加入](https://jq.qq.com/?_wv=1027&k=F96A2mrl)
diff --git a/sa-token-doc/doc.html b/sa-token-doc/doc.html
index 32e5c236..6190bbf7 100644
--- a/sa-token-doc/doc.html
+++ b/sa-token-doc/doc.html
@@ -246,8 +246,8 @@
diff --git a/sa-token-doc/index.html b/sa-token-doc/index.html
index 4f62bf9f..826e9f58 100644
--- a/sa-token-doc/index.html
+++ b/sa-token-doc/index.html
@@ -360,7 +360,7 @@
-
+
@@ -533,7 +533,7 @@
@@ -655,8 +655,8 @@
diff --git a/sa-token-doc/micro/gateway-auth.md b/sa-token-doc/micro/gateway-auth.md
index fc2308db..aa9c8a01 100644
--- a/sa-token-doc/micro/gateway-auth.md
+++ b/sa-token-doc/micro/gateway-auth.md
@@ -17,7 +17,7 @@
``` xml
-
+
cn.dev33
sa-token-reactor-spring-boot-starter
@@ -37,7 +37,7 @@
```
``` gradle
-// Sa-Token 权限认证(Reactor响应式集成),在线文档:http://sa-token.dev33.cn/
+// Sa-Token 权限认证(Reactor响应式集成),在线文档:https://sa-token.cc
implementation 'cn.dev33:sa-token-reactor-spring-boot-starter:${sa.top.version}'
// Sa-Token 整合 Redis (使用 jackson 序列化方式)
diff --git a/sa-token-doc/micro/id-token.md b/sa-token-doc/micro/id-token.md
index 95c0c098..187e33a9 100644
--- a/sa-token-doc/micro/id-token.md
+++ b/sa-token-doc/micro/id-token.md
@@ -26,7 +26,7 @@ Sa-Token提供两种解决方案:
``` xml
-
+
cn.dev33
sa-token-reactor-spring-boot-starter
@@ -46,7 +46,7 @@ Sa-Token提供两种解决方案:
```
``` gradle
-// Sa-Token 权限认证(Reactor响应式集成),在线文档:http://sa-token.dev33.cn/
+// Sa-Token 权限认证(Reactor响应式集成),在线文档:https://sa-token.cc
implementation 'cn.dev33:sa-token-reactor-spring-boot-starter:${sa.top.version}'
// Sa-Token 整合 Redis (使用 jackson 序列化方式)
@@ -59,7 +59,7 @@ implementation 'org.apache.commons:commons-pool2'
``` xml
-
+
cn.dev33
sa-token-spring-boot-starter
@@ -79,7 +79,7 @@ implementation 'org.apache.commons:commons-pool2'
```
``` gradle
-// Sa-Token 权限认证,在线文档:http://sa-token.dev33.cn/
+// Sa-Token 权限认证,在线文档:https://sa-token.cc
implementation 'cn.dev33:sa-token-spring-boot-starter:${sa.top.version}'
// Sa-Token 整合 Redis (使用 jackson 序列化方式)
diff --git a/sa-token-doc/micro/import-intro.md b/sa-token-doc/micro/import-intro.md
index 3de0327c..72389e39 100644
--- a/sa-token-doc/micro/import-intro.md
+++ b/sa-token-doc/micro/import-intro.md
@@ -12,7 +12,7 @@
``` xml
-
+
cn.dev33
sa-token-spring-boot-starter
@@ -21,7 +21,7 @@
```
``` gradle
-// Sa-Token 权限认证,在线文档:http://sa-token.dev33.cn/
+// Sa-Token 权限认证,在线文档:https://sa-token.cc
implementation 'cn.dev33:sa-token-spring-boot-starter:${sa.top.version}'
```
@@ -29,7 +29,7 @@ implementation 'cn.dev33:sa-token-spring-boot-starter:${sa.top.version}'
``` xml
-
+
cn.dev33
sa-token-reactor-spring-boot-starter
@@ -38,7 +38,7 @@ implementation 'cn.dev33:sa-token-spring-boot-starter:${sa.top.version}'
```
``` gradle
-// Sa-Token 权限认证(Reactor响应式集成),在线文档:http://sa-token.dev33.cn/
+// Sa-Token 权限认证(Reactor响应式集成),在线文档:https://sa-token.cc
implementation 'cn.dev33:sa-token-reactor-spring-boot-starter:${sa.top.version}'
```
diff --git a/sa-token-doc/oauth2/oauth2-server.md b/sa-token-doc/oauth2/oauth2-server.md
index e4fc2e88..688d656d 100644
--- a/sa-token-doc/oauth2/oauth2-server.md
+++ b/sa-token-doc/oauth2/oauth2-server.md
@@ -16,7 +16,7 @@
``` xml
-
+
cn.dev33
sa-token-spring-boot-starter
@@ -32,7 +32,7 @@
```
``` gradle
-// Sa-Token 权限认证,在线文档:http://sa-token.dev33.cn/
+// Sa-Token 权限认证,在线文档:https://sa-token.cc
implementation 'cn.dev33:sa-token-spring-boot-starter:${sa.top.version}'
// Sa-Token-OAuth2.0 模块
@@ -154,7 +154,7 @@ public class SaOAuth2ServerApplication {
1、由于暂未搭建Client端,我们可以使用Sa-Token官网作为重定向URL进行测试:
``` url
-http://sa-oauth-server.com:8001/oauth2/authorize?response_type=code&client_id=1001&redirect_uri=http://sa-token.dev33.cn/&scope=userinfo
+http://sa-oauth-server.com:8001/oauth2/authorize?response_type=code&client_id=1001&redirect_uri=https://sa-token.cc&scope=userinfo
```
2、由于首次访问,我们在OAuth-Server端暂未登录,会被转发到登录视图
diff --git a/sa-token-doc/sso/sso-server.md b/sa-token-doc/sso/sso-server.md
index 7588c5e9..3814b582 100644
--- a/sa-token-doc/sso/sso-server.md
+++ b/sa-token-doc/sso/sso-server.md
@@ -12,7 +12,7 @@
``` xml
-
+
cn.dev33
sa-token-spring-boot-starter
@@ -52,7 +52,7 @@
```
``` gradle
-// Sa-Token 权限认证,在线文档:http://sa-token.dev33.cn/
+// Sa-Token 权限认证,在线文档:https://sa-token.cc
implementation 'cn.dev33:sa-token-spring-boot-starter:${sa.top.version}'
// Sa-Token 插件:整合SSO
diff --git a/sa-token-doc/sso/sso-type1.md b/sa-token-doc/sso/sso-type1.md
index 441d551f..87520f57 100644
--- a/sa-token-doc/sso/sso-type1.md
+++ b/sa-token-doc/sso/sso-type1.md
@@ -73,7 +73,7 @@ sa-token.cookie.domain=stp.com
``` xml
-
+
cn.dev33
sa-token-spring-boot-starter
@@ -106,7 +106,7 @@ sa-token.cookie.domain=stp.com
```
``` gradle
-// Sa-Token 权限认证,在线文档:http://sa-token.dev33.cn/
+// Sa-Token 权限认证,在线文档:https://sa-token.cc
implementation 'cn.dev33:sa-token-spring-boot-starter:${sa.top.version}'
// Sa-Token 插件:整合SSO
diff --git a/sa-token-doc/sso/sso-type2.md b/sa-token-doc/sso/sso-type2.md
index 159b9be9..9cbfe3be 100644
--- a/sa-token-doc/sso/sso-type2.md
+++ b/sa-token-doc/sso/sso-type2.md
@@ -72,7 +72,7 @@ sa-token.cookie.domain=stp.com
``` xml
-
+
cn.dev33
sa-token-spring-boot-starter
@@ -105,7 +105,7 @@ sa-token.cookie.domain=stp.com
```
``` gradle
-// Sa-Token 权限认证,在线文档:http://sa-token.dev33.cn/
+// Sa-Token 权限认证,在线文档:https://sa-token.cc
implementation 'cn.dev33:sa-token-spring-boot-starter:${sa.top.version}'
// Sa-Token 插件:整合SSO
diff --git a/sa-token-doc/start/download.md b/sa-token-doc/start/download.md
index 045efb0a..54b5e19d 100644
--- a/sa-token-doc/start/download.md
+++ b/sa-token-doc/start/download.md
@@ -12,7 +12,7 @@
如果你使用的框架基于 ServletAPI 构建( SpringMVC、SpringBoot等 ),请引入此包
``` xml
-
+
cn.dev33
sa-token-spring-boot-starter
@@ -23,7 +23,7 @@
注:如果你使用的框架基于 Reactor 模型构建(Netty、WebFlux、ShenYu、SC Gateway等),请引入此包
``` xml
-
+
cn.dev33
sa-token-reactor-spring-boot-starter
@@ -34,7 +34,7 @@
参考:[Solon官网](https://solon.noear.org/)
``` xml
-
+
cn.dev33
sa-token-solon-plugin
@@ -45,7 +45,7 @@
参考:[JFinal官网](https://jfinal.com/)
``` xml
-
+
cn.dev33
sa-token-jfinal-plugin
@@ -56,7 +56,7 @@
参考:[Jboot官网](http://www.jboot.com.cn/)
``` xml
-
+
cn.dev33
sa-token-jboot-plugin
@@ -67,7 +67,7 @@
参考:[quarkus-sa-token](https://github.com/quarkiverse/quarkus-sa-token)
``` xml
-
+
io.quarkiverse.satoken
quarkus-satoken-resteasy
@@ -78,7 +78,7 @@
注:如果你的项目没有使用Spring,但是Web框架是基于 ServletAPI 规范的,可以引入此包
``` xml
-
+
cn.dev33
sa-token-servlet
@@ -90,7 +90,7 @@
注:如果你的项目既没有使用 SpringMVC、WebFlux,也不是基于 ServletAPI 规范,那么可以引入core核心包
``` xml
-
+
cn.dev33
sa-token-core
@@ -152,7 +152,7 @@ implementation 'cn.dev33:sa-token-core:${sa.top.version}'
## 测试版
更多内测版本了解:[Sa-Token 最新版本](https://gitee.com/dromara/sa-token/blob/dev/sa-token-doc/start/new-version.md)
-Maven依赖一直无法加载成功?[参考解决方案](https://sa-token.dev33.cn/doc.html#/start/maven-pull)
+Maven依赖一直无法加载成功?[参考解决方案](https://sa-token.cc/doc.html#/start/maven-pull)
## jar包下载
[点击下载:sa-token-1.6.0.jar](https://oss.dev33.cn/sa-token/sa-token-1.6.0.jar)
diff --git a/sa-token-doc/start/example.md b/sa-token-doc/start/example.md
index 889995b2..ebafc551 100644
--- a/sa-token-doc/start/example.md
+++ b/sa-token-doc/start/example.md
@@ -16,7 +16,7 @@
``` xml
-
+
cn.dev33
sa-token-spring-boot-starter
@@ -25,16 +25,15 @@
```
``` gradle
-// Sa-Token 权限认证,在线文档:http://sa-token.dev33.cn/
+// Sa-Token 权限认证,在线文档:https://sa-token.cc
implementation 'cn.dev33:sa-token-spring-boot-starter:${sa.top.version}'
```
+Maven依赖一直无法加载成功?[参考解决方案](https://sa-token.cc/doc.html#/start/maven-pull)
更多内测版本了解:[Sa-Token最新版本](https://gitee.com/dromara/sa-token/blob/dev/sa-token-doc/start/new-version.md)
-Maven依赖一直无法加载成功?[参考解决方案](https://sa-token.dev33.cn/doc.html#/start/maven-pull)
-
### 3、设置配置文件
你可以**零配置启动项目** ,但同时你也可以在 `application.yml` 中增加如下配置,定制性使用框架:
@@ -46,7 +45,7 @@ server:
# 端口
port: 8081
-############## Sa-Token 配置 ##############
+############## Sa-Token 配置 (文档: https://sa-token.cc) ##############
sa-token:
# token名称 (同时也是cookie名称)
token-name: satoken
@@ -69,7 +68,7 @@ sa-token:
# 端口
server.port=8081
-############## Sa-Token 配置 ##############
+############## Sa-Token 配置 (文档: https://sa-token.cc) ##############
# token名称 (同时也是cookie名称)
sa-token.token-name=satoken
diff --git a/sa-token-doc/start/new-version.md b/sa-token-doc/start/new-version.md
index 1c4fc906..477e5649 100644
--- a/sa-token-doc/start/new-version.md
+++ b/sa-token-doc/start/new-version.md
@@ -1,6 +1,6 @@
# Sa-Token 最新版本
-在线文档:[https://sa-token.dev33.cn/](https://sa-token.dev33.cn/)
+在线文档:[https://sa-token.cc/](https://sa-token.cc/)
---
@@ -16,7 +16,7 @@ v1.31.0 正式版,可上生产:
```
-Maven依赖一直无法加载成功?[参考解决方案](https://sa-token.dev33.cn/doc.html#/start/maven-pull)
+Maven依赖一直无法加载成功?[参考解决方案](https://sa-token.cc/doc.html#/start/maven-pull)
---
diff --git a/sa-token-doc/start/webflux-example.md b/sa-token-doc/start/webflux-example.md
index 0c46033a..435c4ec6 100644
--- a/sa-token-doc/start/webflux-example.md
+++ b/sa-token-doc/start/webflux-example.md
@@ -19,7 +19,7 @@
``` xml
-
+
cn.dev33
sa-token-reactor-spring-boot-starter
@@ -28,7 +28,7 @@
```
``` gradle
-// Sa-Token 权限认证(Reactor响应式集成),在线文档:http://sa-token.dev33.cn/
+// Sa-Token 权限认证(Reactor响应式集成),在线文档:https://sa-token.cc
implementation 'cn.dev33:sa-token-reactor-spring-boot-starter:${sa.top.version}'
```
diff --git a/sa-token-doc/use/config.md b/sa-token-doc/use/config.md
index 40db73b8..4464305f 100644
--- a/sa-token-doc/use/config.md
+++ b/sa-token-doc/use/config.md
@@ -10,8 +10,7 @@
``` yaml
-############## Sa-Token 配置 ##############
-############## 在线参考:https://sa-token.dev33.cn/doc.html#/use/config ##############
+############## Sa-Token 配置 (文档: https://sa-token.cc) ##############
sa-token:
# token名称 (同时也是cookie名称)
token-name: satoken
@@ -31,8 +30,7 @@ sa-token:
``` properties
-############## Sa-Token 配置 ##############
-############## 在线参考:https://sa-token.dev33.cn/doc.html#/use/config ##############
+############## Sa-Token 配置 (文档: https://sa-token.cc) ##############
# token名称 (同时也是cookie名称)
sa-token.token-name=satoken
diff --git a/sa-token-plugin/sa-token-quick-login/src/main/resources/static/sa-res/login.js b/sa-token-plugin/sa-token-quick-login/src/main/resources/static/sa-res/login.js
index 5e619d17..5d79d67a 100644
--- a/sa-token-plugin/sa-token-quick-login/src/main/resources/static/sa-res/login.js
+++ b/sa-token-plugin/sa-token-quick-login/src/main/resources/static/sa-res/login.js
@@ -61,5 +61,5 @@ $('[name=name],[name=pwd]').bind('keypress', function(event){
$("[name=name]").focus();
// 打印信息
-var str = "This page is provided by Sa-Token, Please refer to: " + "http://sa-token.dev33.cn/";
+var str = "This page is provided by Sa-Token, Please refer to: " + "https://sa-token.cc/";
console.log(str);
diff --git a/sa-token-test/sa-token-springboot-test/src/test/java/cn/dev33/satoken/core/context/model/SaCookieTest.java b/sa-token-test/sa-token-springboot-test/src/test/java/cn/dev33/satoken/core/context/model/SaCookieTest.java
index 8c223cab..207135f1 100644
--- a/sa-token-test/sa-token-springboot-test/src/test/java/cn/dev33/satoken/core/context/model/SaCookieTest.java
+++ b/sa-token-test/sa-token-springboot-test/src/test/java/cn/dev33/satoken/core/context/model/SaCookieTest.java
@@ -16,7 +16,7 @@ public class SaCookieTest {
@Test
public void test() {
SaCookie cookie = new SaCookie("satoken", "xxxx-xxxx-xxxx-xxxx")
- .setDomain("https://sa-token.dev33.cn/")
+ .setDomain("https://sa-token.cc/")
.setMaxAge(-1)
.setPath("/")
.setSameSite("Lax")
@@ -25,13 +25,13 @@ public class SaCookieTest {
Assertions.assertEquals(cookie.getName(), "satoken");
Assertions.assertEquals(cookie.getValue(), "xxxx-xxxx-xxxx-xxxx");
- Assertions.assertEquals(cookie.getDomain(), "https://sa-token.dev33.cn/");
+ Assertions.assertEquals(cookie.getDomain(), "https://sa-token.cc/");
Assertions.assertEquals(cookie.getMaxAge(), -1);
Assertions.assertEquals(cookie.getPath(), "/");
Assertions.assertEquals(cookie.getSameSite(), "Lax");
Assertions.assertEquals(cookie.getHttpOnly(), true);
Assertions.assertEquals(cookie.getSecure(), true);
- Assertions.assertEquals(cookie.toHeaderValue(), "satoken=xxxx-xxxx-xxxx-xxxx; Domain=https://sa-token.dev33.cn/; Path=/; Secure; HttpOnly; sameSite=Lax");
+ Assertions.assertEquals(cookie.toHeaderValue(), "satoken=xxxx-xxxx-xxxx-xxxx; Domain=https://sa-token.cc/; Path=/; Secure; HttpOnly; sameSite=Lax");
Assertions.assertNotNull(cookie.toString());
}
diff --git a/sa-token-test/sa-token-springboot-test/src/test/java/cn/dev33/satoken/core/util/SaFoxUtilTest.java b/sa-token-test/sa-token-springboot-test/src/test/java/cn/dev33/satoken/core/util/SaFoxUtilTest.java
index f8e7baa6..ad9abb05 100644
--- a/sa-token-test/sa-token-springboot-test/src/test/java/cn/dev33/satoken/core/util/SaFoxUtilTest.java
+++ b/sa-token-test/sa-token-springboot-test/src/test/java/cn/dev33/satoken/core/util/SaFoxUtilTest.java
@@ -166,49 +166,49 @@ public class SaFoxUtilTest {
@Test
public void joinParam() {
// 参数为空时,返回原url
- Assertions.assertEquals(SaFoxUtil.joinParam("https://sa-token.dev33.cn", null), "https://sa-token.dev33.cn");
- Assertions.assertEquals(SaFoxUtil.joinParam("https://sa-token.dev33.cn", ""), "https://sa-token.dev33.cn");
+ Assertions.assertEquals(SaFoxUtil.joinParam("https://sa-token.cc", null), "https://sa-token.cc");
+ Assertions.assertEquals(SaFoxUtil.joinParam("https://sa-token.cc", ""), "https://sa-token.cc");
// url为空时,视为空字符串
Assertions.assertEquals(SaFoxUtil.joinParam(null, "id=1"), "?id=1");
Assertions.assertEquals(SaFoxUtil.joinParam("", "id=1"), "?id=1");
// 各种情况的测试
- Assertions.assertEquals(SaFoxUtil.joinParam("https://sa-token.dev33.cn", "id=1"), "https://sa-token.dev33.cn?id=1");
- Assertions.assertEquals(SaFoxUtil.joinParam("https://sa-token.dev33.cn?", "id=1"), "https://sa-token.dev33.cn?id=1");
- Assertions.assertEquals(SaFoxUtil.joinParam("https://sa-token.dev33.cn?name=zhang", "id=1"), "https://sa-token.dev33.cn?name=zhang&id=1");
- Assertions.assertEquals(SaFoxUtil.joinParam("https://sa-token.dev33.cn?name=zhang&", "id=1"), "https://sa-token.dev33.cn?name=zhang&id=1");
+ Assertions.assertEquals(SaFoxUtil.joinParam("https://sa-token.cc", "id=1"), "https://sa-token.cc?id=1");
+ Assertions.assertEquals(SaFoxUtil.joinParam("https://sa-token.cc?", "id=1"), "https://sa-token.cc?id=1");
+ Assertions.assertEquals(SaFoxUtil.joinParam("https://sa-token.cc?name=zhang", "id=1"), "https://sa-token.cc?name=zhang&id=1");
+ Assertions.assertEquals(SaFoxUtil.joinParam("https://sa-token.cc?name=zhang&", "id=1"), "https://sa-token.cc?name=zhang&id=1");
// 重载方法测试
- Assertions.assertEquals(SaFoxUtil.joinParam("https://sa-token.dev33.cn?name=zhang&", "id", 1), "https://sa-token.dev33.cn?name=zhang&id=1");
+ Assertions.assertEquals(SaFoxUtil.joinParam("https://sa-token.cc?name=zhang&", "id", 1), "https://sa-token.cc?name=zhang&id=1");
// url或key为null时,不拼接
Assertions.assertEquals(SaFoxUtil.joinParam(null, "id", 1), null);
- Assertions.assertEquals(SaFoxUtil.joinParam("https://sa-token.dev33.cn", null, 1), "https://sa-token.dev33.cn");
+ Assertions.assertEquals(SaFoxUtil.joinParam("https://sa-token.cc", null, 1), "https://sa-token.cc");
// value为null时,会拼接出一个null字符串
- Assertions.assertEquals(SaFoxUtil.joinParam("https://sa-token.dev33.cn", "id", null), "https://sa-token.dev33.cn?id=null");
+ Assertions.assertEquals(SaFoxUtil.joinParam("https://sa-token.cc", "id", null), "https://sa-token.cc?id=null");
}
@Test
public void joinSharpParam() {
// 参数为空时,返回原url
- Assertions.assertEquals(SaFoxUtil.joinSharpParam("https://sa-token.dev33.cn", null), "https://sa-token.dev33.cn");
- Assertions.assertEquals(SaFoxUtil.joinSharpParam("https://sa-token.dev33.cn", ""), "https://sa-token.dev33.cn");
+ Assertions.assertEquals(SaFoxUtil.joinSharpParam("https://sa-token.cc", null), "https://sa-token.cc");
+ Assertions.assertEquals(SaFoxUtil.joinSharpParam("https://sa-token.cc", ""), "https://sa-token.cc");
// url为空时,视为空字符串
Assertions.assertEquals(SaFoxUtil.joinSharpParam(null, "id=1"), "#id=1");
Assertions.assertEquals(SaFoxUtil.joinSharpParam("", "id=1"), "#id=1");
// 各种情况的测试
- Assertions.assertEquals(SaFoxUtil.joinSharpParam("https://sa-token.dev33.cn", "id=1"), "https://sa-token.dev33.cn#id=1");
- Assertions.assertEquals(SaFoxUtil.joinSharpParam("https://sa-token.dev33.cn#", "id=1"), "https://sa-token.dev33.cn#id=1");
- Assertions.assertEquals(SaFoxUtil.joinSharpParam("https://sa-token.dev33.cn#name=zhang", "id=1"), "https://sa-token.dev33.cn#name=zhang&id=1");
- Assertions.assertEquals(SaFoxUtil.joinSharpParam("https://sa-token.dev33.cn#name=zhang&", "id=1"), "https://sa-token.dev33.cn#name=zhang&id=1");
+ Assertions.assertEquals(SaFoxUtil.joinSharpParam("https://sa-token.cc", "id=1"), "https://sa-token.cc#id=1");
+ Assertions.assertEquals(SaFoxUtil.joinSharpParam("https://sa-token.cc#", "id=1"), "https://sa-token.cc#id=1");
+ Assertions.assertEquals(SaFoxUtil.joinSharpParam("https://sa-token.cc#name=zhang", "id=1"), "https://sa-token.cc#name=zhang&id=1");
+ Assertions.assertEquals(SaFoxUtil.joinSharpParam("https://sa-token.cc#name=zhang&", "id=1"), "https://sa-token.cc#name=zhang&id=1");
// 重载方法测试
- Assertions.assertEquals(SaFoxUtil.joinSharpParam("https://sa-token.dev33.cn#name=zhang&", "id", 1), "https://sa-token.dev33.cn#name=zhang&id=1");
+ Assertions.assertEquals(SaFoxUtil.joinSharpParam("https://sa-token.cc#name=zhang&", "id", 1), "https://sa-token.cc#name=zhang&id=1");
// url或key为null时,不拼接
Assertions.assertEquals(SaFoxUtil.joinSharpParam(null, "id", 1), null);
- Assertions.assertEquals(SaFoxUtil.joinSharpParam("https://sa-token.dev33.cn", null, 1), "https://sa-token.dev33.cn");
+ Assertions.assertEquals(SaFoxUtil.joinSharpParam("https://sa-token.cc", null, 1), "https://sa-token.cc");
// value为null时,会拼接出一个null字符串
- Assertions.assertEquals(SaFoxUtil.joinSharpParam("https://sa-token.dev33.cn", "id", null), "https://sa-token.dev33.cn#id=null");
+ Assertions.assertEquals(SaFoxUtil.joinSharpParam("https://sa-token.cc", "id", null), "https://sa-token.cc#id=null");
}
@Test
@@ -233,7 +233,7 @@ public class SaFoxUtilTest {
@Test
public void isUrl() {
- Assertions.assertTrue(SaFoxUtil.isUrl("https://sa-token.dev33.cn"));
+ Assertions.assertTrue(SaFoxUtil.isUrl("https://sa-token.cc"));
Assertions.assertTrue(SaFoxUtil.isUrl("https://www.baidu.com/"));
Assertions.assertFalse(SaFoxUtil.isUrl(null));
@@ -246,8 +246,8 @@ public class SaFoxUtilTest {
@Test
public void encodeUrl() {
- Assertions.assertEquals(SaFoxUtil.encodeUrl("https://sa-token.dev33.cn"), "https%3A%2F%2Fsa-token.dev33.cn");
- Assertions.assertEquals(SaFoxUtil.decoderUrl("https%3A%2F%2Fsa-token.dev33.cn"), "https://sa-token.dev33.cn");
+ Assertions.assertEquals(SaFoxUtil.encodeUrl("https://sa-token.cc"), "https%3A%2F%2Fsa-token.cc");
+ Assertions.assertEquals(SaFoxUtil.decoderUrl("https%3A%2F%2Fsa-token.cc"), "https://sa-token.cc");
}
@Test