mirror of
https://gitee.com/dromara/sa-token.git
synced 2025-04-04 23:39:27 +08:00
优化文档..
This commit is contained in:
parent
fe9aebc5cf
commit
6592b62523
@ -1,2 +1,2 @@
|
||||
请在以下地址复制 issue 模板进行提交:
|
||||
https://sa-token.dev33.cn/doc.html#/fun/issue-template
|
||||
https://sa-token.cc/doc.html#/fun/issue-template
|
||||
|
2
.github/ISSUE_TEMPLATE.md
vendored
2
.github/ISSUE_TEMPLATE.md
vendored
@ -1,2 +1,2 @@
|
||||
请在以下地址复制 issue 模板进行提交:
|
||||
https://sa-token.dev33.cn/doc.html#/fun/issue-template
|
||||
https://sa-token.cc/doc.html#/fun/issue-template
|
||||
|
43
README.md
43
README.md
@ -1,5 +1,5 @@
|
||||
<p align="center">
|
||||
<img alt="logo" src="https://sa-token.dev33.cn/logo.png" width="150" height="150">
|
||||
<img alt="logo" src="https://sa-token.cc/logo.png" width="150" height="150">
|
||||
</p>
|
||||
<h1 align="center" style="margin: 30px 0 30px; font-weight: bold;">Sa-Token v1.31.0</h1>
|
||||
<h4 align="center">一个轻量级 Java 权限认证框架,让鉴权变得简单、优雅!</h4>
|
||||
@ -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 的开源项目
|
||||
|
@ -5,7 +5,7 @@ import java.io.Serializable;
|
||||
/**
|
||||
* Sa-Token 配置类 Model
|
||||
* <p>
|
||||
* 你可以通过yml、properties、java代码等形式配置本类参数,具体请查阅官方文档: http://sa-token.dev33.cn/
|
||||
* 你可以通过yml、properties、java代码等形式配置本类参数,具体请查阅官方文档: https://sa-token.cc/
|
||||
*
|
||||
* @author kong
|
||||
*
|
||||
|
@ -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标记 ===================
|
||||
|
||||
|
@ -31,7 +31,7 @@
|
||||
<artifactId>spring-boot-starter-aop</artifactId>
|
||||
</dependency>
|
||||
|
||||
<!-- Sa-Token 权限认证, 在线文档:http://sa-token.dev33.cn/ -->
|
||||
<!-- Sa-Token 权限认证, 在线文档:https://sa-token.cc/ -->
|
||||
<dependency>
|
||||
<groupId>cn.dev33</groupId>
|
||||
<artifactId>sa-token-spring-boot-starter</artifactId>
|
||||
|
@ -32,7 +32,7 @@
|
||||
<artifactId>spring-boot-starter-aop</artifactId>
|
||||
</dependency>
|
||||
|
||||
<!-- Sa-Token 权限认证, 在线文档:http://sa-token.dev33.cn/ -->
|
||||
<!-- Sa-Token 权限认证, 在线文档:https://sa-token.cc/ -->
|
||||
<dependency>
|
||||
<groupId>cn.dev33</groupId>
|
||||
<artifactId>sa-token-spring-boot-starter</artifactId>
|
||||
|
@ -27,7 +27,7 @@
|
||||
<artifactId>spring-boot-starter-web</artifactId>
|
||||
</dependency>
|
||||
|
||||
<!-- Sa-Token 权限认证, 在线文档:http://sa-token.dev33.cn/ -->
|
||||
<!-- Sa-Token 权限认证, 在线文档:https://sa-token.cc/ -->
|
||||
<dependency>
|
||||
<groupId>cn.dev33</groupId>
|
||||
<artifactId>sa-token-spring-boot-starter</artifactId>
|
||||
|
@ -28,7 +28,7 @@
|
||||
<artifactId>spring-boot-starter-web</artifactId>
|
||||
</dependency>
|
||||
|
||||
<!-- Sa-Token 权限认证, 在线文档:http://sa-token.dev33.cn/ -->
|
||||
<!-- Sa-Token 权限认证, 在线文档:https://sa-token.cc/ -->
|
||||
<dependency>
|
||||
<groupId>cn.dev33</groupId>
|
||||
<artifactId>sa-token-spring-boot-starter</artifactId>
|
||||
|
@ -91,7 +91,7 @@
|
||||
|
||||
<br><br>
|
||||
<span>更多资料请参考 Sa-Token 官方文档地址:</span>
|
||||
<a href="http://sa-token.dev33.cn/">http://sa-token.dev33.cn/</a>
|
||||
<a href="https://sa-token.cc/">https://sa-token.cc/</a>
|
||||
|
||||
<div style="height: 200px;"></div>
|
||||
</div>
|
||||
|
@ -28,7 +28,7 @@
|
||||
<artifactId>spring-boot-starter-web</artifactId>
|
||||
</dependency>
|
||||
|
||||
<!-- Sa-Token 权限认证, 在线文档:http://sa-token.dev33.cn/ -->
|
||||
<!-- Sa-Token 权限认证, 在线文档:https://sa-token.cc/ -->
|
||||
<dependency>
|
||||
<groupId>cn.dev33</groupId>
|
||||
<artifactId>sa-token-spring-boot-starter</artifactId>
|
||||
|
@ -27,7 +27,7 @@
|
||||
<artifactId>spring-boot-starter-web</artifactId>
|
||||
</dependency>
|
||||
|
||||
<!-- Sa-Token 权限认证, 在线文档:http://sa-token.dev33.cn/ -->
|
||||
<!-- Sa-Token 权限认证, 在线文档:https://sa-token.cc/ -->
|
||||
<dependency>
|
||||
<groupId>cn.dev33</groupId>
|
||||
<artifactId>sa-token-spring-boot-starter</artifactId>
|
||||
|
@ -21,7 +21,7 @@
|
||||
<version>1.10.4</version>
|
||||
</dependency>
|
||||
|
||||
<!-- Sa-Token 权限认证, 在线文档:http://sa-token.dev33.cn/ -->
|
||||
<!-- Sa-Token 权限认证, 在线文档:https://sa-token.cc/ -->
|
||||
<dependency>
|
||||
<groupId>cn.dev33</groupId>
|
||||
<artifactId>sa-token-solon-plugin</artifactId>
|
||||
|
@ -32,7 +32,7 @@
|
||||
<artifactId>spring-boot-starter-aop</artifactId>
|
||||
</dependency>
|
||||
|
||||
<!-- Sa-Token 权限认证, 在线文档:http://sa-token.dev33.cn/ -->
|
||||
<!-- Sa-Token 权限认证, 在线文档:https://sa-token.cc/ -->
|
||||
<dependency>
|
||||
<groupId>cn.dev33</groupId>
|
||||
<artifactId>sa-token-spring-boot-starter</artifactId>
|
||||
|
@ -32,7 +32,7 @@
|
||||
<artifactId>spring-boot-starter-aop</artifactId>
|
||||
</dependency>
|
||||
|
||||
<!-- Sa-Token 权限认证, 在线文档:http://sa-token.dev33.cn/ -->
|
||||
<!-- Sa-Token 权限认证, 在线文档:https://sa-token.cc/ -->
|
||||
<dependency>
|
||||
<groupId>cn.dev33</groupId>
|
||||
<artifactId>sa-token-spring-boot-starter</artifactId>
|
||||
|
@ -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);
|
||||
|
@ -27,7 +27,7 @@
|
||||
<artifactId>spring-boot-starter-web</artifactId>
|
||||
</dependency>
|
||||
|
||||
<!-- Sa-Token 权限认证, 在线文档:http://sa-token.dev33.cn/ -->
|
||||
<!-- Sa-Token 权限认证, 在线文档:https://sa-token.cc/ -->
|
||||
<dependency>
|
||||
<groupId>cn.dev33</groupId>
|
||||
<artifactId>sa-token-spring-boot-starter</artifactId>
|
||||
|
@ -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);
|
||||
|
@ -27,7 +27,7 @@
|
||||
<artifactId>spring-boot-starter-web</artifactId>
|
||||
</dependency>
|
||||
|
||||
<!-- Sa-Token 权限认证, 在线文档:http://sa-token.dev33.cn/ -->
|
||||
<!-- Sa-Token 权限认证, 在线文档:https://sa-token.cc/ -->
|
||||
<dependency>
|
||||
<groupId>cn.dev33</groupId>
|
||||
<artifactId>sa-token-spring-boot-starter</artifactId>
|
||||
|
@ -27,7 +27,7 @@
|
||||
<artifactId>spring-boot-starter-web</artifactId>
|
||||
</dependency>
|
||||
|
||||
<!-- Sa-Token 权限认证, 在线文档:http://sa-token.dev33.cn/ -->
|
||||
<!-- Sa-Token 权限认证, 在线文档:https://sa-token.cc/ -->
|
||||
<dependency>
|
||||
<groupId>cn.dev33</groupId>
|
||||
<artifactId>sa-token-spring-boot-starter</artifactId>
|
||||
|
@ -27,7 +27,7 @@
|
||||
<artifactId>spring-boot-starter-web</artifactId>
|
||||
</dependency>
|
||||
|
||||
<!-- Sa-Token 权限认证, 在线文档:http://sa-token.dev33.cn/ -->
|
||||
<!-- Sa-Token 权限认证, 在线文档:https://sa-token.cc/ -->
|
||||
<dependency>
|
||||
<groupId>cn.dev33</groupId>
|
||||
<artifactId>sa-token-spring-boot-starter</artifactId>
|
||||
|
@ -32,7 +32,7 @@
|
||||
<artifactId>spring-boot-starter-aop</artifactId>
|
||||
</dependency>
|
||||
|
||||
<!-- Sa-Token 权限认证, 在线文档:http://sa-token.dev33.cn/ -->
|
||||
<!-- Sa-Token 权限认证, 在线文档:https://sa-token.cc/ -->
|
||||
<dependency>
|
||||
<groupId>cn.dev33</groupId>
|
||||
<artifactId>sa-token-spring-boot-starter</artifactId>
|
||||
|
@ -2,7 +2,7 @@
|
||||
server:
|
||||
port: 8081
|
||||
|
||||
# sa-token配置
|
||||
############## Sa-Token 配置 (文档: https://sa-token.cc) ##############
|
||||
sa-token:
|
||||
# token名称 (同时也是cookie名称)
|
||||
token-name: satoken
|
||||
|
@ -37,7 +37,7 @@
|
||||
<artifactId>spring-boot-starter-thymeleaf</artifactId>
|
||||
</dependency>
|
||||
|
||||
<!-- Sa-Token 权限认证, 在线文档:http://sa-token.dev33.cn/ -->
|
||||
<!-- Sa-Token 权限认证, 在线文档:https://sa-token.cc/ -->
|
||||
<dependency>
|
||||
<groupId>cn.dev33</groupId>
|
||||
<artifactId>sa-token-spring-boot-starter</artifactId>
|
||||
|
@ -31,7 +31,7 @@
|
||||
<artifactId>spring-boot-starter-aop</artifactId>
|
||||
</dependency>
|
||||
|
||||
<!-- Sa-Token 权限认证(Reactor响应式集成), 在线文档:http://sa-token.dev33.cn/ -->
|
||||
<!-- Sa-Token 权限认证(Reactor响应式集成), 在线文档:https://sa-token.cc/ -->
|
||||
<dependency>
|
||||
<groupId>cn.dev33</groupId>
|
||||
<artifactId>sa-token-reactor-spring-boot-starter</artifactId>
|
||||
|
@ -38,7 +38,7 @@
|
||||
<artifactId>spring-boot-starter-websocket</artifactId>
|
||||
</dependency>
|
||||
|
||||
<!-- Sa-Token 权限认证, 在线文档:http://sa-token.dev33.cn/ -->
|
||||
<!-- Sa-Token 权限认证, 在线文档:https://sa-token.cc/ -->
|
||||
<dependency>
|
||||
<groupId>cn.dev33</groupId>
|
||||
<artifactId>sa-token-spring-boot-starter</artifactId>
|
||||
|
@ -38,7 +38,7 @@
|
||||
<artifactId>spring-boot-starter-websocket</artifactId>
|
||||
</dependency>
|
||||
|
||||
<!-- Sa-Token 权限认证, 在线文档:http://sa-token.dev33.cn/ -->
|
||||
<!-- Sa-Token 权限认证, 在线文档:https://sa-token.cc/ -->
|
||||
<dependency>
|
||||
<groupId>cn.dev33</groupId>
|
||||
<artifactId>sa-token-spring-boot-starter</artifactId>
|
||||
|
@ -1,5 +1,5 @@
|
||||
<p align="center">
|
||||
<img alt="logo" src="https://sa-token.dev33.cn/logo.png" width="150" height="150">
|
||||
<img alt="logo" src="https://sa-token.cc/logo.png" width="150" height="150">
|
||||
</p>
|
||||
<h1 align="center" style="margin: 30px 0 30px; font-weight: bold;">Sa-Token v1.31.0</h1>
|
||||
<h5 align="center">一个轻量级 Java 权限认证框架,让鉴权变得简单、优雅!</h5>
|
||||
@ -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)
|
||||
|
||||
|
@ -246,8 +246,8 @@
|
||||
|
||||
<script type="text/javascript">
|
||||
// 预览版提示
|
||||
if(location.host === 'rc.sa-token.dev33.cn') {
|
||||
const newTips = '<b>当前文档为RC预览版文档,仅做学习测试使用,正式项目请使用正式版:<a href="https://sa-token.dev33.cn/" target="_blank">https://sa-token.dev33.cn/</a></b>';
|
||||
if(location.host === 'rc.sa-token.cc') {
|
||||
const newTips = '<b>当前文档为RC预览版文档,仅做学习测试使用,正式项目请使用正式版:<a href="https://sa-token.cc/" target="_blank">https://sa-token.cc/</a></b>';
|
||||
layer.alert(newTips);
|
||||
}
|
||||
</script>
|
||||
|
@ -360,7 +360,7 @@
|
||||
<a href="https://hutool.cn/" target="_blank">
|
||||
<img src="https://oss.dev33.cn/sa-token/link/hutool.jpg" msg="🍬小而全的Java工具类库,使Java拥有函数式语言般的优雅,让Java语言也可以“甜甜的”。">
|
||||
</a>
|
||||
<a href="https://sa-token.dev33.cn/" target="_blank">
|
||||
<a href="https://sa-token.cc/" target="_blank">
|
||||
<img src="https://oss.dev33.cn/sa-token/link/sa-token.png" msg="一个轻量级 java 权限认证框架,让鉴权变得简单、优雅!">
|
||||
</a>
|
||||
<a href="https://gitee.com/dromara/hmily" target="_blank">
|
||||
@ -533,7 +533,7 @@
|
||||
</style>
|
||||
<div class="foot-box" id="foot">
|
||||
<div class="s-width" style="text-align: center;">
|
||||
Copyright ©2022 Sa-Token java权限认证 | sa-token.dev33.cn | <a href="https://beian.miit.gov.cn/" target="_blank">鲁ICP备18046274号-2</a>
|
||||
Copyright ©2022 Sa-Token java权限认证 | sa-token.cc | <a href="https://beian.miit.gov.cn/" target="_blank">鲁ICP备18046274号-2</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@ -655,8 +655,8 @@
|
||||
|
||||
<script type="text/javascript">
|
||||
// 预览版提示
|
||||
if(location.host === 'rc.sa-token.dev33.cn') {
|
||||
const newTips = '<b>当前文档为RC预览版文档,仅做学习测试使用,正式项目请使用正式版:<a href="https://sa-token.dev33.cn/" target="_blank">https://sa-token.dev33.cn/</a></b>';
|
||||
if(location.host === 'rc.sa-token.cc') {
|
||||
const newTips = '<b>当前文档为RC预览版文档,仅做学习测试使用,正式项目请使用正式版:<a href="https://sa-token.cc/" target="_blank">https://sa-token.cc/</a></b>';
|
||||
layer.alert(newTips);
|
||||
}
|
||||
</script>
|
||||
|
@ -17,7 +17,7 @@
|
||||
<!---------------------------- tabs:start ------------------------------>
|
||||
<!-------- tab:Maven 方式 -------->
|
||||
``` xml
|
||||
<!-- Sa-Token 权限认证(Reactor响应式集成), 在线文档:http://sa-token.dev33.cn/ -->
|
||||
<!-- Sa-Token 权限认证(Reactor响应式集成), 在线文档:https://sa-token.cc -->
|
||||
<dependency>
|
||||
<groupId>cn.dev33</groupId>
|
||||
<artifactId>sa-token-reactor-spring-boot-starter</artifactId>
|
||||
@ -37,7 +37,7 @@
|
||||
```
|
||||
<!-------- tab:Gradle 方式 -------->
|
||||
``` 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 序列化方式)
|
||||
|
@ -26,7 +26,7 @@ Sa-Token提供两种解决方案:
|
||||
<!---------------------------- tabs:start ------------------------------>
|
||||
<!-------- tab:Maven 方式 -------->
|
||||
``` xml
|
||||
<!-- Sa-Token 权限认证(Reactor响应式集成), 在线文档:http://sa-token.dev33.cn/ -->
|
||||
<!-- Sa-Token 权限认证(Reactor响应式集成), 在线文档:https://sa-token.cc -->
|
||||
<dependency>
|
||||
<groupId>cn.dev33</groupId>
|
||||
<artifactId>sa-token-reactor-spring-boot-starter</artifactId>
|
||||
@ -46,7 +46,7 @@ Sa-Token提供两种解决方案:
|
||||
```
|
||||
<!-------- tab:Gradle 方式 -------->
|
||||
``` 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'
|
||||
<!---------------------------- tabs:start ------------------------------>
|
||||
<!-------- tab:Maven 方式 -------->
|
||||
``` xml
|
||||
<!-- Sa-Token 权限认证, 在线文档:http://sa-token.dev33.cn/ -->
|
||||
<!-- Sa-Token 权限认证, 在线文档:https://sa-token.cc -->
|
||||
<dependency>
|
||||
<groupId>cn.dev33</groupId>
|
||||
<artifactId>sa-token-spring-boot-starter</artifactId>
|
||||
@ -79,7 +79,7 @@ implementation 'org.apache.commons:commons-pool2'
|
||||
```
|
||||
<!-------- tab:Gradle 方式 -------->
|
||||
``` 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 序列化方式)
|
||||
|
@ -12,7 +12,7 @@
|
||||
<!---------------------------- tabs:start ---------------------------->
|
||||
<!-------- tab:Maven 方式 -------->
|
||||
``` xml
|
||||
<!-- Sa-Token 权限认证,在线文档:http://sa-token.dev33.cn/ -->
|
||||
<!-- Sa-Token 权限认证,在线文档:https://sa-token.cc -->
|
||||
<dependency>
|
||||
<groupId>cn.dev33</groupId>
|
||||
<artifactId>sa-token-spring-boot-starter</artifactId>
|
||||
@ -21,7 +21,7 @@
|
||||
```
|
||||
<!-------- tab:Gradle 方式 -------->
|
||||
``` 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}'
|
||||
```
|
||||
<!---------------------------- tabs:end ---------------------------->
|
||||
@ -29,7 +29,7 @@ implementation 'cn.dev33:sa-token-spring-boot-starter:${sa.top.version}'
|
||||
<!---------------------------- tabs:start ------------------------------>
|
||||
<!-------- tab:Maven 方式 -------->
|
||||
``` xml
|
||||
<!-- Sa-Token 权限认证(Reactor响应式集成),在线文档:http://sa-token.dev33.cn/ -->
|
||||
<!-- Sa-Token 权限认证(Reactor响应式集成),在线文档:https://sa-token.cc -->
|
||||
<dependency>
|
||||
<groupId>cn.dev33</groupId>
|
||||
<artifactId>sa-token-reactor-spring-boot-starter</artifactId>
|
||||
@ -38,7 +38,7 @@ implementation 'cn.dev33:sa-token-spring-boot-starter:${sa.top.version}'
|
||||
```
|
||||
<!-------- tab:Gradle 方式 -------->
|
||||
``` 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}'
|
||||
```
|
||||
<!---------------------------- tabs:end ------------------------------>
|
||||
|
@ -16,7 +16,7 @@
|
||||
<!---------------------------- tabs:start ---------------------------->
|
||||
<!-------- tab:Maven 方式 -------->
|
||||
``` xml
|
||||
<!-- Sa-Token 权限认证, 在线文档:http://sa-token.dev33.cn/ -->
|
||||
<!-- Sa-Token 权限认证, 在线文档:https://sa-token.cc -->
|
||||
<dependency>
|
||||
<groupId>cn.dev33</groupId>
|
||||
<artifactId>sa-token-spring-boot-starter</artifactId>
|
||||
@ -32,7 +32,7 @@
|
||||
```
|
||||
<!-------- tab:Gradle 方式 -------->
|
||||
``` 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端暂未登录,会被转发到登录视图
|
||||
|
@ -12,7 +12,7 @@
|
||||
<!---------------------------- tabs:start ---------------------------->
|
||||
<!-------- tab:Maven 方式 -------->
|
||||
``` xml
|
||||
<!-- Sa-Token 权限认证,在线文档:http://sa-token.dev33.cn/ -->
|
||||
<!-- Sa-Token 权限认证,在线文档:https://sa-token.cc -->
|
||||
<dependency>
|
||||
<groupId>cn.dev33</groupId>
|
||||
<artifactId>sa-token-spring-boot-starter</artifactId>
|
||||
@ -52,7 +52,7 @@
|
||||
```
|
||||
<!-------- tab:Gradle 方式 -------->
|
||||
``` 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
|
||||
|
@ -73,7 +73,7 @@ sa-token.cookie.domain=stp.com
|
||||
<!---------------------------- tabs:start ---------------------------->
|
||||
<!-------- tab:Maven 方式 -------->
|
||||
``` xml
|
||||
<!-- Sa-Token 权限认证, 在线文档:http://sa-token.dev33.cn/ -->
|
||||
<!-- Sa-Token 权限认证, 在线文档:https://sa-token.cc -->
|
||||
<dependency>
|
||||
<groupId>cn.dev33</groupId>
|
||||
<artifactId>sa-token-spring-boot-starter</artifactId>
|
||||
@ -106,7 +106,7 @@ sa-token.cookie.domain=stp.com
|
||||
```
|
||||
<!-------- tab:Gradle 方式 -------->
|
||||
``` 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
|
||||
|
@ -72,7 +72,7 @@ sa-token.cookie.domain=stp.com
|
||||
<!---------------------------- tabs:start ---------------------------->
|
||||
<!-------- tab:Maven 方式 -------->
|
||||
``` xml
|
||||
<!-- Sa-Token 权限认证, 在线文档:http://sa-token.dev33.cn/ -->
|
||||
<!-- Sa-Token 权限认证, 在线文档:https://sa-token.cc -->
|
||||
<dependency>
|
||||
<groupId>cn.dev33</groupId>
|
||||
<artifactId>sa-token-spring-boot-starter</artifactId>
|
||||
@ -105,7 +105,7 @@ sa-token.cookie.domain=stp.com
|
||||
```
|
||||
<!-------- tab:Gradle 方式 -------->
|
||||
``` 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
|
||||
|
@ -12,7 +12,7 @@
|
||||
<!------------- tab:SpringBoot环境 (ServletAPI) ------------->
|
||||
如果你使用的框架基于 ServletAPI 构建( SpringMVC、SpringBoot等 ),请引入此包
|
||||
``` xml
|
||||
<!-- Sa-Token 权限认证, 在线文档:http://sa-token.dev33.cn/ -->
|
||||
<!-- Sa-Token 权限认证, 在线文档:https://sa-token.cc -->
|
||||
<dependency>
|
||||
<groupId>cn.dev33</groupId>
|
||||
<artifactId>sa-token-spring-boot-starter</artifactId>
|
||||
@ -23,7 +23,7 @@
|
||||
<!------------- tab:WebFlux环境 (Reactor) ------------->
|
||||
注:如果你使用的框架基于 Reactor 模型构建(Netty、WebFlux、ShenYu、SC Gateway等),请引入此包
|
||||
``` xml
|
||||
<!-- Sa-Token 权限认证(Reactor响应式集成), 在线文档:http://sa-token.dev33.cn/ -->
|
||||
<!-- Sa-Token 权限认证(Reactor响应式集成), 在线文档:https://sa-token.cc -->
|
||||
<dependency>
|
||||
<groupId>cn.dev33</groupId>
|
||||
<artifactId>sa-token-reactor-spring-boot-starter</artifactId>
|
||||
@ -34,7 +34,7 @@
|
||||
<!------------- tab:Solon 集成 ------------->
|
||||
参考:[Solon官网](https://solon.noear.org/)
|
||||
``` xml
|
||||
<!-- Sa-Token 整合 Solon, 在线文档:http://sa-token.dev33.cn/ -->
|
||||
<!-- Sa-Token 整合 Solon, 在线文档:https://sa-token.cc -->
|
||||
<dependency>
|
||||
<groupId>cn.dev33</groupId>
|
||||
<artifactId>sa-token-solon-plugin</artifactId>
|
||||
@ -45,7 +45,7 @@
|
||||
<!------------- tab:JFinal 集成 ------------->
|
||||
参考:[JFinal官网](https://jfinal.com/)
|
||||
``` xml
|
||||
<!-- Sa-Token 整合 JFinal, 在线文档:http://sa-token.dev33.cn/ -->
|
||||
<!-- Sa-Token 整合 JFinal, 在线文档:https://sa-token.cc -->
|
||||
<dependency>
|
||||
<groupId>cn.dev33</groupId>
|
||||
<artifactId>sa-token-jfinal-plugin</artifactId>
|
||||
@ -56,7 +56,7 @@
|
||||
<!------------- tab:Jboot 集成 ------------->
|
||||
参考:[Jboot官网](http://www.jboot.com.cn/)
|
||||
``` xml
|
||||
<!-- Sa-Token 整合 Jboot, 在线文档:http://sa-token.dev33.cn/ -->
|
||||
<!-- Sa-Token 整合 Jboot, 在线文档:https://sa-token.cc -->
|
||||
<dependency>
|
||||
<groupId>cn.dev33</groupId>
|
||||
<artifactId>sa-token-jboot-plugin</artifactId>
|
||||
@ -67,7 +67,7 @@
|
||||
<!------------- tab:Quarkus 集成 ------------->
|
||||
参考:[quarkus-sa-token](https://github.com/quarkiverse/quarkus-sa-token)
|
||||
``` xml
|
||||
<!-- Sa-Token 整合 Quarkus, 在线文档:http://sa-token.dev33.cn/ -->
|
||||
<!-- Sa-Token 整合 Quarkus, 在线文档:https://sa-token.cc -->
|
||||
<dependency>
|
||||
<groupId>io.quarkiverse.satoken</groupId>
|
||||
<artifactId>quarkus-satoken-resteasy</artifactId>
|
||||
@ -78,7 +78,7 @@
|
||||
<!------------- tab:裸Servlet容器环境 ------------->
|
||||
注:如果你的项目没有使用Spring,但是Web框架是基于 ServletAPI 规范的,可以引入此包
|
||||
``` xml
|
||||
<!-- Sa-Token 权限认证(ServletAPI规范), 在线文档:http://sa-token.dev33.cn/ -->
|
||||
<!-- Sa-Token 权限认证(ServletAPI规范), 在线文档:https://sa-token.cc -->
|
||||
<dependency>
|
||||
<groupId>cn.dev33</groupId>
|
||||
<artifactId>sa-token-servlet</artifactId>
|
||||
@ -90,7 +90,7 @@
|
||||
<!------------- tab:其它 ------------->
|
||||
注:如果你的项目既没有使用 SpringMVC、WebFlux,也不是基于 ServletAPI 规范,那么可以引入core核心包
|
||||
``` xml
|
||||
<!-- Sa-Token 权限认证(core核心包), 在线文档:http://sa-token.dev33.cn/ -->
|
||||
<!-- Sa-Token 权限认证(core核心包), 在线文档:https://sa-token.cc -->
|
||||
<dependency>
|
||||
<groupId>cn.dev33</groupId>
|
||||
<artifactId>sa-token-core</artifactId>
|
||||
@ -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)
|
||||
|
@ -16,7 +16,7 @@
|
||||
<!---------------------------- tabs:start ---------------------------->
|
||||
<!-------- tab:Maven 方式 -------->
|
||||
``` xml
|
||||
<!-- Sa-Token 权限认证,在线文档:http://sa-token.dev33.cn/ -->
|
||||
<!-- Sa-Token 权限认证,在线文档:https://sa-token.cc -->
|
||||
<dependency>
|
||||
<groupId>cn.dev33</groupId>
|
||||
<artifactId>sa-token-spring-boot-starter</artifactId>
|
||||
@ -25,16 +25,15 @@
|
||||
```
|
||||
<!-------- tab:Gradle 方式 -------->
|
||||
``` 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}'
|
||||
```
|
||||
<!---------------------------- tabs:end ---------------------------->
|
||||
|
||||
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
|
||||
|
@ -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 正式版,可上生产:
|
||||
</dependency>
|
||||
```
|
||||
|
||||
Maven依赖一直无法加载成功?[参考解决方案](https://sa-token.dev33.cn/doc.html#/start/maven-pull)
|
||||
Maven依赖一直无法加载成功?[参考解决方案](https://sa-token.cc/doc.html#/start/maven-pull)
|
||||
|
||||
---
|
||||
|
||||
|
@ -19,7 +19,7 @@
|
||||
<!---------------------------- tabs:start ------------------------------>
|
||||
<!-------- tab:Maven 方式 -------->
|
||||
``` xml
|
||||
<!-- Sa-Token 权限认证(Reactor响应式集成),在线文档:http://sa-token.dev33.cn/ -->
|
||||
<!-- Sa-Token 权限认证(Reactor响应式集成),在线文档:https://sa-token.cc -->
|
||||
<dependency>
|
||||
<groupId>cn.dev33</groupId>
|
||||
<artifactId>sa-token-reactor-spring-boot-starter</artifactId>
|
||||
@ -28,7 +28,7 @@
|
||||
```
|
||||
<!-------- tab:Gradle 方式 -------->
|
||||
``` 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}'
|
||||
```
|
||||
<!---------------------------- tabs:end ------------------------------>
|
||||
|
@ -10,8 +10,7 @@
|
||||
|
||||
<!------------- tab:yaml 风格 ------------->
|
||||
``` 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:
|
||||
|
||||
<!------------- tab:properties 风格 ------------->
|
||||
``` 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
|
||||
|
@ -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);
|
||||
|
@ -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());
|
||||
}
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user