1
0
mirror of synced 2026-05-22 22:53:16 +00:00

重构文档结构

This commit is contained in:
click33
2022-10-10 00:59:08 +08:00
parent a27ed0ce88
commit 94e572c087
120 changed files with 286 additions and 49 deletions
+1 -1
View File
@@ -1,2 +1,2 @@
请在以下地址复制 issue 模板进行提交:
https://sa-token.dev33.cn/doc/index.html#/fun/issue-template
https://sa-token.dev33.cn/doc.html#/fun/issue-template
+1 -1
View File
@@ -1,2 +1,2 @@
请在以下地址复制 issue 模板进行提交:
https://sa-token.dev33.cn/doc/index.html#/fun/issue-template
https://sa-token.dev33.cn/doc.html#/fun/issue-template
+6 -6
View File
@@ -1,5 +1,5 @@
<p align="center">
<img alt="logo" src="https://sa-token.dev33.cn/doc/logo.png" width="150" height="150">
<img alt="logo" src="https://sa-token.dev33.cn/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>
@@ -115,13 +115,13 @@ Sa-Token-SSO 由简入难划分为三种模式,解决不同架构下的 SSO
| 系统架构 | 采用模式 | 简介 | 文档链接 |
| :-------- | :-------- | :-------- | :-------- |
| 前端同域 + 后端同 Redis | 模式一 | 共享Cookie同步会话 | [文档](http://sa-token.dev33.cn/doc/index.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/index.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/index.html#/sso/sso-type3)、[示例](https://gitee.com/dromara/sa-token/blob/master/sa-token-demo/sa-token-demo-sso3-client) |
| 前端同域 + 后端同 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) |
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/index.html#/plugin/alone-redis)
2. 后端同Redis:就是指多个系统可以连接同一个Redis。PS:这里并不需要把所有项目的数据都放在同一个Redis中,Sa-Token提供了 **`[权限缓存与业务缓存分离]`** 的解决方案,详情戳:[Alone独立Redis插件](http://sa-token.dev33.cn/doc.html#/plugin/alone-redis)
3. 如果既无法做到前端同域,也无法做到后端同Redis,那么只能走模式三,Http请求获取会话(Sa-Token对SSO提供了完整的封装,你只需要按照示例从文档上复制几段代码便可以轻松集成)
## Sa-Token-OAuth2 授权认证
@@ -134,7 +134,7 @@ Sa-OAuth2 模块分为四种授权模式,解决不同场景下的授权需求
| 密码式(Password | Client直接拿着用户的账号密码换取授权 Token |
| 客户端凭证(Client Credentials| Server 端针对 Client 级别的 Token,代表应用自身的资源授权 |
详细参考文档:[http://sa-token.dev33.cn/doc/index.html#/oauth2/readme](http://sa-token.dev33.cn/doc/index.html#/oauth2/readme)
详细参考文档:[http://sa-token.dev33.cn/doc.html#/oauth2/readme](http://sa-token.dev33.cn/doc.html#/oauth2/readme)
## 使用 Sa-Token 的开源项目
@@ -1,5 +1,5 @@
<p align="center">
<img alt="logo" src="https://sa-token.dev33.cn/doc/logo.png" width="150" height="150">
<img alt="logo" src="https://sa-token.dev33.cn/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>
@@ -1,7 +1,7 @@
<!-- 这是目录树文件 -->
- **开始**
- [介绍](/)
- [框架介绍](/)
- [在 SpringBoot 环境集成](/start/example)
- [在 WebFlux 环境集成](/start/webflux-example)
- [其它环境集成示例](/start/download)
+220
View File
@@ -0,0 +1,220 @@
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8">
<title>Sa-Token</title>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
<meta name="description" content="Sa-Token是一个java权限认证框架,功能全面,上手简单,登录认证、权限认证、Session会话、踢人下线、账号封禁、集成Redis、前后台分离、分布式会话、微服务网关鉴权、单点登录、OAuth2.0、临时Token验证、记住我模式、模拟他人账号、临时身份切换、多账号体系、注解式鉴权、路由拦截式鉴权、花式token、自动续签、同端互斥登录、会话治理、密码加密、jwt集成、Spring集成、WebFlux集成...,有了sa-token,你所有的权限认证问题,都不再是问题">
<meta name="keywords" content="sa-token,sa-token框架,sa-token文档,java权限认证">
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<link rel="shortcut icon" type="image/x-icon" href="logo.png">
<link rel="stylesheet" href="./static/doc.css">
<link rel="stylesheet" href="./static/vue.css">
<script type="text/javascript" src="https://cdn.wwads.cn/js/makemoney.js" async></script>
</head>
<body>
<div class="doc-header">
<div class="nav-left">
<a href="doc.html">
<div class="logo-box">
<img src="logo.png" title="logo" />
<h1 class="logo-text">Sa-Token</h1>
<sub>v1.31.0</sub>
</div>
</a>
</div>
<nav class="nav-right">
<div class="sear-box p-none" tabindex="-1" >
<!-- 加载中…… -->
</div>
<select class="p-none" onchange="location.href=this.value">
<option value="doc.html">最新版</option>
<option value="v/v1.30.0/doc/index.html">v1.30.0</option>
<option value="v/v1.29.0/doc/index.html">v1.29.0</option>
<option value="v/v1.28.0/doc/index.html">v1.28.0</option>
<option value="v/v1.27.0/doc/index.html">v1.27.0</option>
<option value="v/v1.26.0/doc/index.html">v1.26.0</option>
<option value="v/v1.25.0/doc/index.html">v1.25.0</option>
<option value="v/v1.24.0/doc/index.html">v1.24.0</option>
<option value="v/v1.23.0/doc/index.html">v1.23.0</option>
<option value="v/v1.22.0/doc/index.html">v1.22.0</option>
<option value="v/v1.21.0/doc/index.html">v1.21.0</option>
<option value="v/v1.20.0/doc/index.html">v1.20.0</option>
<option value="v/v1.19.0/doc/index.html">v1.19.0</option>
<option value="v/v1.18.0/doc/index.html">v1.18.0</option>
<option value="v/v1.17.0/doc/index.html">v1.17.0</option>
<option value="v/v1.16.0/doc/index.html">v1.16.0</option>
<option value="v/v1.15.0/doc/index.html">v1.15.0</option>
<option value="v/v1.14.0/doc/index.html">v1.14.0</option>
<option value="v/v1.13.0/doc/index.html">v1.13.0</option>
<option value="v/v1.12.1/doc/index.html">v1.12.1</option>
<option value="v/v1.12.0/doc/index.html">v1.12.0</option>
<option value="v/v1.11.0/doc/index.html">v1.11.0</option>
<option value="v/v1.10.0/doc/index.html">v1.10.0</option>
<option value="v/v1.9.0/doc/index.html">v1.9.0</option>
<option value="v/v1.8.0/doc/index.html">v1.8.0</option>
<option value="v/v1.7.0/doc/index.html">v1.7.0</option>
<option value="v/v1.6.0/doc/index.html">v1.6.0</option>
<option value="v/v1.5.1/doc/index.html">v1.5.1</option>
<option value="v/v1.4.0/doc/index.html">v1.4.0</option>
<option value="v/v1.3.0/doc/index.html">v1.3.0</option>
<option value="v/v1.2.0/doc/index.html">v1.2.0</option>
<option value="v/v1.1.0/doc/index.html">v1.1.0</option>
<option value="v/v1.0.0/doc/index.html">v1.0.0</option>
</select>
<a class="wzi" href="index.html">首页</a>
<a class="wzi" href="doc.html">文档</a>
<a class="p-none wzi" href="#/more/link">案例</a>
<a class="p-none wzi" href="#/more/blog">博客</a>
<a class="p-none wzi" href="#/more/sa-token-donate">赞助</a>
<a class="p-none wzi" href="#/sso/sso-pro">🔥 SSO商业版</a>
<div class="zk-box">
<a class="wzi" href="javascript:;">
<span>相关资源 </span>
<span class="zk-icon"></span>
</a>
<div class="zk-context">
<div>
<!-- <a href="#/more/sa-token-donate">❤️ &nbsp;赞助</a> -->
<a href="#/more/update-log">更新日志</a>
<a href="#/more/common-questions">常见报错</a>
<a href="#/more/tj-gzh">推荐公众号</a>
<div class="zk-fengexian"></div>
<!-- <a href="http://sa-app.dev33.cn/wall.html?name=sa-token" target="_blank">需求墙</a> -->
<a href="#/fun/sa-token-test">在线考试</a>
<a href="#/fun/issue-template">在线提问</a>
<a href="https://wj.qq.com/s2/10852322/0d8b/" target="_blank">需求提交</a>
<a href="https://wj.qq.com/s2/8475114/2f6a/" target="_blank">问卷调查</a>
</div>
</div>
</div>
</nav>
</div>
<!-- <a href="/">
<div class="logo-box">
<img src="logo.png" title="logo" />
<h1 class="logo-text">Sa-Token</h1>
</div>
</a> -->
<div class="main-box">
<div id="app">加载中...</div>
</div>
<div style="position: fixed; right: 0; bottom: 0; z-index: 10000; border: 0px #aaa solid;">
<div class="wwads-cn wwads-vertical" data-id="88" style="max-width:150px"></div>
</div>
<!-- UI逐渐显现 -->
<style type="text/css">
body{opacity: 0.01; transition: opacity 0.5s; background-color: #FFF;}
</style>
<script type="text/javascript">
setTimeout(function() {
document.body.style.opacity = 1;
}, 1);
</script>
<!-- -->
<script src="./static/docsify-plugin.js"></script>
<script>
var saTokenTopVersion = '1.31.0'; // Sa-Token最新版本
var name = '<img style="width: 60px; height: 60px; vertical-align: middle;" src="logo.png" alt="logo" /> ';
name += '<b style="font-size: 28px; vertical-align: middle;">Sa-Token</b> <sub>v' + saTokenTopVersion + '</sub>';
window.$docsify = {
// name: name, // 名字
repo: 'https://github.com/dromara/sa-token', // github地址
// themeColor: '#06A3D7', // 主题颜色
basePath: location.pathname.substr(0, location.pathname.lastIndexOf('/') + 1), // 自动计算项目名字
// basePath: '/sa-token-doc/', // 设置文件加载的父路径, 这在一些带项目名部署的文件中非常有效
auto2top: true, // 是否在切换页面后回到顶部
// coverpage: true, // 开启封面
subMaxLevel: 4, // 标题解析层级, 写几就在目录树中解析到几级标题 ,一般写2吧也就
loadSidebar: true, // 加载自定义侧边栏 , 目录定制在: _sidebar.md 文件 (需要创建 .nojekyll 的空文件,阻止 GitHub Pages 忽略命名是下划线开头的文件)
copyCode: { // 复制插件
buttonText: '复制到剪贴板',
errorText: '错误',
successText: '复制成功'
},
topMargin: 90, // 锚点距离顶部的距离
// sidebarDisplayLevel : 1 , // 设置侧边栏显示级别
// search: 'auto', // 搜索功能
alias: {
// '/sso/_sidebar.md': '/sso/_sidebar.md',
'/.*/_sidebar.md': '/_sidebar.md'
},
// tab选项卡
tabs: {
persist : true, // 是否在刷新页面时重置选项卡
sync : true, // 页面上的多个tab是否同步切换
theme : 'classic', // 主题:'classic', 'material', false
tabComments: true, // 用注释来标注选项卡标题,例如:<!-- tab:SpringBoot -->
tabHeadings: true // 用标题+粗体来定制选项卡
},
// 自定义插件
plugins: [myDocsifyPlugin],
}
</script>
<script src="static/docsify.min.js"></script>
<script src="static/docsify-copy-code.min.js"></script>
<script src="static/prism-java.min.js"></script>
<!-- 搜索框 -->
<script src="static/search.min.js"></script>
<!-- 多 tab 切换 -->
<script src="static/docsify-tabs.min.js"></script>
<!-- img点击放大 -->
<script src="static/zoom-image.min.js"></script>
<!-- sidebar折叠 -->
<!-- <link rel="stylesheet" href="//cdn.jsdelivr.net/npm/docsify-sidebar-collapse/dist/sidebar.min.css" />
<script src="//cdn.jsdelivr.net/npm/docsify-sidebar-collapse/dist/docsify-sidebar-collapse.min.js"></script> -->
<!-- jqeury -->
<script src="static/jquery.min.js"></script>
<script src="static/layer-v3.1.1/layer.js"></script>
<script>
if(window.jQuery === undefined || window.Docsify === undefined) {
var str = 'CDN 加载失败,请打开备用地址:<a href="index-backup.html' + location.hash + '" target="_blank">index-backup.html</a>';
document.querySelector('#app').innerHTML = str;
}
</script>
<!-- 搜索引擎自动提交 -->
<script>
(function() {
var bp = document.createElement('script');
var curProtocol = window.location.protocol.split(':')[0];
if (curProtocol === 'https') {
bp.src = 'https://zz.bdstatic.com/linksubmit/push.js';
} else {
bp.src = 'http://push.zhanzhang.baidu.com/push.js';
}
var s = document.getElementsByTagName("script")[0];
s.parentNode.insertBefore(bp, s);
})();
</script>
<!-- 友盟 -->
<div style="height: 0px; overflow: hidden;">
<script type="text/javascript" src="https://s4.cnzz.com/z_stat.php?id=1279646043&web_id=1279646043"></script>
</div>
<!-- 百度统计 -->
<script>
var _hmt = _hmt || [];
(function() {
var hm = document.createElement("script");
hm.src = "https://hm.baidu.com/hm.js?77d7418dd845f98ba1cfee8596eeee3f";
var s = document.getElementsByTagName("script")[0];
s.parentNode.insertBefore(hm, s);
})();
</script>
<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>';
layer.alert(newTips);
}
</script>
</body>
</html>
Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.9 KiB

@@ -4,10 +4,10 @@
> 请在新建 issue 时,尽量复制模板格式进行提交
>
> 1. 提交之前率先参考 [Sa-Token 常见问题解答](https://sa-token.dev33.cn/doc/index.html#/more/common-questions) 以及善用 Gitee issues 搜索功能,查阅问题是否已有答案,已存在的 issue 就不要再重复提交了。
> 1. 提交之前率先参考 <a href="#/more/common-questions" target="_blank">Sa-Token 常见问题解答</a> 以及善用 Gitee issues 搜索功能,查阅问题是否已有答案,已存在的 issue 就不要再重复提交了。
> 2. 问题已得到处理的 issue 请大家及时手动关闭,如果超过24小时没有追问,我们将默认提交者已找到解决方案,关闭issue。
> 3. 有时候 issue 提交之后,没有得到及时回复,大家可以加入QQ群@管理员寻求帮助
> 4. 请大家新建 issue 时删除不必要的模板信息、精简语句、**做好代码排版**,对于不方便描述的业务场景,可参阅 [Sa-Token 名词解释](https://sa-token.dev33.cn/doc/index.html#/more/noun-intro) 方便组织语句,这样有助于减低大家的沟通成本。
> 4. 请大家新建 issue 时删除不必要的模板信息、精简语句、**做好代码排版**,对于不方便描述的业务场景,可参阅 <a href="#/more/noun-intro" target="_blank">Sa-Token 名词解释</a> 方便组织语句,这样有助于减低大家的沟通成本。
> 5. **代码截图要带上行号!报错信息要把异常堆栈截全!页面截图要把地址栏带上!Ajax请求要把请求地址、请求头、请求参数都截全!**
@@ -20,7 +20,7 @@
SaTokenContext只是一个接口,没有工作能力,这也就意味着 SaTokenContext 接口的实现是必须的。
那么疑问来了,我们之前在 SpringBoot 中引用 Sa-Token 时为什么可以直接使用呢?
其实原理很简单,`sa-token-spring-boot-starter`集成包中已经内置了`SaTokenContext`的实现:[SaTokenContextForSpring](https://gitee.com/dromara/sa-token/blob/dev/sa-token-starter/sa-token-spring-boot-starter/src/main/java/cn/dev33/satoken/spring/SaTokenContextForSpring.java)
其实原理很简单,`sa-token-spring-boot-starter`集成包中已经内置了`SaTokenContext`的实现:[SaTokenContextForSpring](https://gitee.com/dromara/sa-token/blob/master/sa-token-starter/sa-token-spring-boot-starter/src/main/java/cn/dev33/satoken/spring/SaTokenContextForSpring.java)
并且根据 Spring 的自动注入特性,在项目启动时注入到 Sa-Token 中,做到“开箱即用”。
那么如果我们使用不是 Spring 框架,是不是就必须得手动实现 `SaTokenContext` 接口?答案是肯定的,脱离Spring 环境后,我们就不能再使用`sa-token-spring-boot-starter`集成包了,
@@ -81,9 +81,9 @@ public interface SaTokenContext {
```
如果你的 Web 框架不是基于 Servlet 规范,那么你就需要手动实现这三个 Model 接口,我们可以参考 `sa-token-servlet` 是怎样实现的:
[SaRequestForServlet.java](https://gitee.com/dromara/sa-token/blob/dev/sa-token-starter/sa-token-servlet/src/main/java/cn/dev33/satoken/servlet/model/SaRequestForServlet.java)、
[SaResponseForServlet.java](https://gitee.com/dromara/sa-token/blob/dev/sa-token-starter/sa-token-servlet/src/main/java/cn/dev33/satoken/servlet/model/SaResponseForServlet.java)、
[SaStorageForServlet.java](https://gitee.com/dromara/sa-token/blob/dev/sa-token-starter/sa-token-servlet/src/main/java/cn/dev33/satoken/servlet/model/SaStorageForServlet.java)。
[SaRequestForServlet.java](https://gitee.com/dromara/sa-token/blob/master/sa-token-starter/sa-token-servlet/src/main/java/cn/dev33/satoken/servlet/model/SaRequestForServlet.java)、
[SaResponseForServlet.java](https://gitee.com/dromara/sa-token/blob/master/sa-token-starter/sa-token-servlet/src/main/java/cn/dev33/satoken/servlet/model/SaResponseForServlet.java)、
[SaStorageForServlet.java](https://gitee.com/dromara/sa-token/blob/master/sa-token-starter/sa-token-servlet/src/main/java/cn/dev33/satoken/servlet/model/SaStorageForServlet.java)。
### 3、实现 SaTokenContext 接口
@@ -132,7 +132,7 @@ public class SaTokenContextForSpring implements SaTokenContext {
```
详细参考:
[SaTokenContextForSpring.java](https://gitee.com/dromara/sa-token/blob/dev/sa-token-starter/sa-token-spring-boot-starter/src/main/java/cn/dev33/satoken/spring/SaTokenContextForSpring.java)
[SaTokenContextForSpring.java](https://gitee.com/dromara/sa-token/blob/master/sa-token-starter/sa-token-spring-boot-starter/src/main/java/cn/dev33/satoken/spring/SaTokenContextForSpring.java)
### 4、将自定义实现注入到 Sa-Token 框架中
@@ -157,8 +157,8 @@ public class Application {
```
如果你使用的框架带有自动注入特性,那就更简单了,参考 Spring 集成包的 Bean 注入流程:
[注册Bean](https://gitee.com/dromara/sa-token/blob/dev/sa-token-starter/sa-token-spring-boot-starter/src/main/java/cn/dev33/satoken/spring/SaBeanRegister.java)、
[注入Bean](https://gitee.com/dromara/sa-token/blob/dev/sa-token-starter/sa-token-spring-boot-starter/src/main/java/cn/dev33/satoken/spring/SaBeanInject.java)
[注册Bean](https://gitee.com/dromara/sa-token/blob/master/sa-token-starter/sa-token-spring-boot-starter/src/main/java/cn/dev33/satoken/spring/SaBeanRegister.java)、
[注入Bean](https://gitee.com/dromara/sa-token/blob/master/sa-token-starter/sa-token-spring-boot-starter/src/main/java/cn/dev33/satoken/spring/SaBeanInject.java)
### 5、启动项目
+24 -22
View File
@@ -7,9 +7,8 @@
<meta name="description" content="Sa-Token是一个java权限认证框架,功能全面,上手简单,登录认证、权限认证、Session会话、踢人下线、账号封禁、集成Redis、前后台分离、分布式会话、微服务网关鉴权、单点登录、OAuth2.0、临时Token验证、记住我模式、模拟他人账号、临时身份切换、多账号体系、注解式鉴权、路由拦截式鉴权、花式token、自动续签、同端互斥登录、会话治理、密码加密、jwt集成、Spring集成、WebFlux集成...,有了sa-token,你所有的权限认证问题,都不再是问题">
<meta name="keywords" content="sa-token,sa-token框架,sa-token文档,java权限认证">
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<link rel="shortcut icon" type="image/x-icon" href="doc/logo.png">
<link rel="stylesheet" href="./index.css">
<!-- <link rel="stylesheet" href="https://unpkg.zhimg.com/docsify@4.11.3/lib/themes/vue.css"> -->
<link rel="shortcut icon" type="image/x-icon" href="logo.png">
<link rel="stylesheet" href="static/index.css">
</head>
<body>
<!-- 总盒子 -->
@@ -18,9 +17,9 @@
<!-- ------------ 头部 ------------- -->
<header class="doc-header">
<div class="nav-left">
<a href="index.html">
<a href="./">
<div class="logo-box">
<img src="./doc/logo.png" title="logo" />
<img src="./logo.png" title="logo" />
<span class="logo-text">Sa-Token</span>
<!-- <h1 class="logo-text">Sa-Token</h1> -->
<!-- <sub>v1.31.0</sub> -->
@@ -29,11 +28,11 @@
</div>
<nav class="nav-right">
<a class="wzi" href="index.html">首页</a>
<a class="wzi" href="doc/index.html">文档</a>
<a class="p-none wzi" href="doc/index.html#/more/link">案例</a>
<a class="p-none wzi" href="doc/index.html#/more/blog">博客</a>
<a class="p-none wzi" href="doc/index.html#/more/sa-token-donate">赞助</a>
<a class="p-none wzi" href="doc/index.html#/sso/sso-pro">🔥 SSO商业版</a>
<a class="wzi" href="doc.html">文档</a>
<a class="p-none wzi" href="doc.html#/more/link">案例</a>
<a class="p-none wzi" href="doc.html#/more/blog">博客</a>
<a class="p-none wzi" href="doc.html#/more/sa-token-donate">赞助</a>
<a class="p-none wzi" href="doc.html#/sso/sso-pro">🔥 SSO商业版</a>
<div class="zk-box">
<a class="wzi" href="javascript:;">
<span>相关资源 </span>
@@ -42,13 +41,13 @@
<div class="zk-context">
<div>
<!-- <a href="#/more/sa-token-donate">❤️ &nbsp;赞助</a> -->
<a href="doc/index.html#/more/update-log">更新日志</a>
<a href="doc/index.html#/more/common-questions">常见报错</a>
<a href="doc/index.html#/more/tj-gzh">推荐公众号</a>
<a href="doc.html#/more/update-log">更新日志</a>
<a href="doc.html#/more/common-questions">常见报错</a>
<a href="doc.html#/more/tj-gzh">推荐公众号</a>
<div class="zk-fengexian"></div>
<!-- <a href="http://sa-app.dev33.cn/wall.html?name=sa-token" target="_blank">需求墙</a> -->
<a href="doc/index.html#/fun/sa-token-test">在线考试</a>
<a href="doc/index.html#/fun/issue-template">在线提问</a>
<a href="doc.html#/fun/sa-token-test">在线考试</a>
<a href="doc.html#/fun/issue-template">在线提问</a>
<a href="https://wj.qq.com/s2/10852322/0d8b/" target="_blank">需求提交</a>
<a href="https://wj.qq.com/s2/8475114/2f6a/" target="_blank">问卷调查</a>
</div>
@@ -77,8 +76,8 @@
<div class="btn-box">
<a class="abtn" href="https://github.com/dromara/sa-token" target="_blank">GitHub</a>
<a class="abtn" href="https://gitee.com/dromara/sa-token" target="_blank">码云</a>
<a class="abtn" href="doc/index.html#/more/join-group" target="_self">加入讨论群</a>
<a class="abtn doc-btn" href="doc/index.html" target="_self">开发文档</a>
<a class="abtn" href="doc.html#/more/join-group" target="_self">加入讨论群</a>
<a class="abtn doc-btn" href="doc.html" target="_self">开发文档</a>
<!-- <a href="https://gitee.com/dromara/sa-token" target="_blank">集成案例</a> -->
</div>
<h4 align="center" class="badge-box">
@@ -226,7 +225,7 @@
<div class="re-text">
<span>
如果您的开源项目也使用了 Sa-Token,您可以
<a href="doc/index.html#/more/link" target="_blank" style="text-decoration: none;">在此</a>
<a href="https://gitee.com/sa-token/awesome-sa-token" target="_blank" style="text-decoration: none;">在此</a>
提交
</span>
</div>
@@ -471,6 +470,9 @@
<a href="https://hippo4j.cn/" target="_blank">
<img src="https://oss.dev33.cn/sa-token/link/hippo4j.jpg" msg="强大的动态线程池框架,附带监控报警功能,支持 Tomcat、Jetty、Undertow、RocketMQ、Dubbo、RabbitMQ、Hystrix 消费线程池">
</a>
<a href="http://solon.noear.org/" target="_blank">
<img src="https://oss.dev33.cn/sa-token/link/solon.png" msg="一个更现代感的应用开发框架:更快、更小、更自由。">
</a>
</div>
<div style="height: 10px; clear: both;"></div>
</div>
@@ -503,7 +505,7 @@
<ul class="list-unstyle">
<!-- <li>电话:<a href="tel:123;">123</a></li> -->
<!-- <li>QQ群 <a href="xxx" target="_blank">111</a></li> -->
<li>QQ群 <a href="doc/index.html#/more/join-group">点击加入</a></li>
<li>QQ群 <a href="doc.html#/more/join-group">点击加入</a></li>
<li>邮箱:<a href="javascript: alert('暂无');">暂无</a></li>
<li>联系:<a href="javascript: alert('暂无');">暂无</a></li>
</ul>
@@ -531,7 +533,7 @@
</style>
<div class="foot-box" id="foot">
<div class="s-width" style="text-align: center;">
Copyright ©2021 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.dev33.cn | <a href="https://beian.miit.gov.cn/" target="_blank">鲁ICP备18046274号-2</a>
</div>
</div>
</div>
@@ -578,8 +580,8 @@
</script>
<!-- 悬浮效果 -->
<script src="https://unpkg.com/jquery@3.4.1/dist/jquery.min.js"></script>
<script src="https://www.layuicdn.com/layer-v3.1.1/layer.js"></script>
<script src="static/jquery.min.js"></script>
<script src="static/layer-v3.1.1/layer.js"></script>
<script type="text/javascript">
// 鼠标悬浮在友情链接时,提示信息
$(".com-box-you a img").hover(function(){

Before

Width:  |  Height:  |  Size: 4.8 KiB

After

Width:  |  Height:  |  Size: 4.8 KiB

@@ -42,6 +42,11 @@
- [[ chaos ]](https://gitee.com/qishanor/chaos):一个基于 SpringBoot + Sa-Token + Mybatis-Plus的快速开发框架,前端vue-element-avue,内置代码生成器,代码最简洁,最佳学习实践方案。
- [[ xzadmin ]](https://gitee.com/xiaozhizxj/xzadmin):一个基于 Spring Boot+mybatis-plus+sotaken+Redis+Thymeleaf+hutool+easy-captcha+log4j的后台管理系统
- [[ Snowy ]](https://gitee.com/xiaonuobase/snowy):国内首个国密前后分离快速开发平台,采用 Vue3 + AntDesignVue3 + Vite + SpringBoot + Mp + HuTool + SaToken
### 微服务相关
@@ -44,6 +44,6 @@ SaOAuth2Util.saveGrantScope(clientId, loginId, scope);
SaOAuth2Util.getRefreshToken(refreshToken);
```
详情请参考源码:[码云:SaOAuth2Util.java](https://gitee.com/dromara/sa-token/blob/dev/sa-token-plugin/sa-token-oauth2/src/main/java/cn/dev33/satoken/oauth2/logic/SaOAuth2Util.java)
详情请参考源码:[码云:SaOAuth2Util.java](https://gitee.com/dromara/sa-token/blob/master/sa-token-plugin/sa-token-oauth2/src/main/java/cn/dev33/satoken/oauth2/logic/SaOAuth2Util.java)
@@ -65,7 +65,7 @@ spring:
timeout: 10s
```
具体可参考示例:[码云:application.yml](https://gitee.com/dromara/sa-token/blob/dev/sa-token-demo/sa-token-demo-alone-redis/src/main/resources/application.yml)
具体可参考示例:[码云:application.yml](https://gitee.com/dromara/sa-token/blob/master/sa-token-demo/sa-token-demo-alone-redis/src/main/resources/application.yml)
### 3、测试
@@ -2,7 +2,7 @@
---
对于权限框架来讲,最容易碰到的扩展点便是数据存储方式,为了方便对接不同的缓存中间件,Sa-Token将所有数据持久化操作抽象到SaTokenDao接口,
开发者要对接不同的平台只需要实现此接口即可,接口签名:[SaTokenDao.java](https://gitee.com/dromara/sa-token/blob/dev/sa-token-core/src/main/java/cn/dev33/satoken/dao/SaTokenDao.java)
开发者要对接不同的平台只需要实现此接口即可,接口签名:[SaTokenDao.java](https://gitee.com/dromara/sa-token/blob/master/sa-token-core/src/main/java/cn/dev33/satoken/dao/SaTokenDao.java)
框架已提供的集成包包括:
@@ -25,7 +25,7 @@ Sa-Token-SSO 由简入难划分为三种模式,解决不同架构下的 SSO
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/index.html#/plugin/alone-redis)
2. 后端同Redis:就是指多个系统可以连接同一个Redis。PS:这里并不需要把所有项目的数据都放在同一个Redis中,Sa-Token提供了 **`[权限缓存与业务缓存分离]`** 的解决方案,详情戳: <a href="#/plugin/alone-redis" target="_blank">Alone独立Redis插件</a>
3. 如果既无法做到前端同域,也无法做到后端同Redis,那么只能走模式三,Http请求获取会话(Sa-Token对SSO提供了完整的封装,你只需要按照示例从文档上复制几段代码便可以轻松集成)。
@@ -20,8 +20,8 @@ var myDocsifyPlugin = function(hook, vm) {
hook.afterEach(function(html) {
// 功能 2,文章底部添加仓库地址
var url = 'https://gitee.com/dromara/sa-token/tree/dev/sa-token-doc/doc/' + vm.route.file;
var url2 = 'https://github.com/dromara/sa-token/tree/dev/sa-token-doc/doc/' + vm.route.file;
var url = 'https://gitee.com/dromara/sa-token/tree/dev/sa-token-doc/' + vm.route.file;
var url2 = 'https://github.com/dromara/sa-token/tree/dev/sa-token-doc/' + vm.route.file;
var footer = [
'<br/><br/><br/><br/><br/><br/><br/><hr/>',
'<footer>',
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -0,0 +1,2 @@
/*! layer mobile-v2.0.0 Web弹层组件 MIT License http://layer.layui.com/mobile By 贤心 */
;!function(e){"use strict";var t=document,n="querySelectorAll",i="getElementsByClassName",a=function(e){return t[n](e)},s={type:0,shade:!0,shadeClose:!0,fixed:!0,anim:"scale"},l={extend:function(e){var t=JSON.parse(JSON.stringify(s));for(var n in e)t[n]=e[n];return t},timer:{},end:{}};l.touch=function(e,t){e.addEventListener("click",function(e){t.call(this,e)},!1)};var r=0,o=["layui-m-layer"],c=function(e){var t=this;t.config=l.extend(e),t.view()};c.prototype.view=function(){var e=this,n=e.config,s=t.createElement("div");e.id=s.id=o[0]+r,s.setAttribute("class",o[0]+" "+o[0]+(n.type||0)),s.setAttribute("index",r);var l=function(){var e="object"==typeof n.title;return n.title?'<h3 style="'+(e?n.title[1]:"")+'">'+(e?n.title[0]:n.title)+"</h3>":""}(),c=function(){"string"==typeof n.btn&&(n.btn=[n.btn]);var e,t=(n.btn||[]).length;return 0!==t&&n.btn?(e='<span yes type="1">'+n.btn[0]+"</span>",2===t&&(e='<span no type="0">'+n.btn[1]+"</span>"+e),'<div class="layui-m-layerbtn">'+e+"</div>"):""}();if(n.fixed||(n.top=n.hasOwnProperty("top")?n.top:100,n.style=n.style||"",n.style+=" top:"+(t.body.scrollTop+n.top)+"px"),2===n.type&&(n.content='<i></i><i class="layui-m-layerload"></i><i></i><p>'+(n.content||"")+"</p>"),n.skin&&(n.anim="up"),"msg"===n.skin&&(n.shade=!1),s.innerHTML=(n.shade?"<div "+("string"==typeof n.shade?'style="'+n.shade+'"':"")+' class="layui-m-layershade"></div>':"")+'<div class="layui-m-layermain" '+(n.fixed?"":'style="position:static;"')+'><div class="layui-m-layersection"><div class="layui-m-layerchild '+(n.skin?"layui-m-layer-"+n.skin+" ":"")+(n.className?n.className:"")+" "+(n.anim?"layui-m-anim-"+n.anim:"")+'" '+(n.style?'style="'+n.style+'"':"")+">"+l+'<div class="layui-m-layercont">'+n.content+"</div>"+c+"</div></div></div>",!n.type||2===n.type){var d=t[i](o[0]+n.type),y=d.length;y>=1&&layer.close(d[0].getAttribute("index"))}document.body.appendChild(s);var u=e.elem=a("#"+e.id)[0];n.success&&n.success(u),e.index=r++,e.action(n,u)},c.prototype.action=function(e,t){var n=this;e.time&&(l.timer[n.index]=setTimeout(function(){layer.close(n.index)},1e3*e.time));var a=function(){var t=this.getAttribute("type");0==t?(e.no&&e.no(),layer.close(n.index)):e.yes?e.yes(n.index):layer.close(n.index)};if(e.btn)for(var s=t[i]("layui-m-layerbtn")[0].children,r=s.length,o=0;o<r;o++)l.touch(s[o],a);if(e.shade&&e.shadeClose){var c=t[i]("layui-m-layershade")[0];l.touch(c,function(){layer.close(n.index,e.end)})}e.end&&(l.end[n.index]=e.end)},e.layer={v:"2.0",index:r,open:function(e){var t=new c(e||{});return t.index},close:function(e){var n=a("#"+o[0]+e)[0];n&&(n.innerHTML="",t.body.removeChild(n),clearTimeout(l.timer[e]),delete l.timer[e],"function"==typeof l.end[e]&&l.end[e](),delete l.end[e])},closeAll:function(){for(var e=t[i](o[0]),n=0,a=e.length;n<a;n++)layer.close(0|e[0].getAttribute("index"))}},"function"==typeof define?define(function(){return layer}):function(){var e=document.scripts,n=e[e.length-1],i=n.src,a=i.substring(0,i.lastIndexOf("/")+1);n.getAttribute("merge")||document.head.appendChild(function(){var e=t.createElement("link");return e.href=a+"need/layer.css?2.0",e.type="text/css",e.rel="styleSheet",e.id="layermcss",e}())}()}(window);
File diff suppressed because one or more lines are too long
Binary file not shown.

After

Width:  |  Height:  |  Size: 5.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

File diff suppressed because one or more lines are too long
Binary file not shown.

After

Width:  |  Height:  |  Size: 5.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 701 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Before

Width:  |  Height:  |  Size: 216 B

After

Width:  |  Height:  |  Size: 216 B

Some files were not shown because too many files have changed in this diff Show More