重构文档结构
@ -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
|
||||
|
2
.github/ISSUE_TEMPLATE.md
vendored
@ -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
|
||||
|
12
README.md
@ -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
sa-token-doc/doc.html
Normal 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">❤️ 赞助</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>
|
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、启动项目
|
@ -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">❤️ 赞助</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>',
|
1
sa-token-doc/static/docsify.min.js
vendored
Normal file
2
sa-token-doc/static/jquery.min.js
vendored
Normal file
2
sa-token-doc/static/layer-v3.1.1/layer.js
Normal file
2
sa-token-doc/static/layer-v3.1.1/mobile/layer.js
Normal file
@ -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);
|
1
sa-token-doc/static/layer-v3.1.1/mobile/need/layer.css
Normal file
BIN
sa-token-doc/static/layer-v3.1.1/theme/default/icon-ext.png
Normal file
After Width: | Height: | Size: 5.8 KiB |
BIN
sa-token-doc/static/layer-v3.1.1/theme/default/icon.png
Normal file
After Width: | Height: | Size: 11 KiB |
1
sa-token-doc/static/layer-v3.1.1/theme/default/layer.css
Normal file
BIN
sa-token-doc/static/layer-v3.1.1/theme/default/loading-0.gif
Normal file
After Width: | Height: | Size: 5.7 KiB |
BIN
sa-token-doc/static/layer-v3.1.1/theme/default/loading-1.gif
Normal file
After Width: | Height: | Size: 701 B |
BIN
sa-token-doc/static/layer-v3.1.1/theme/default/loading-2.gif
Normal file
After Width: | Height: | Size: 1.7 KiB |
Before Width: | Height: | Size: 216 B After Width: | Height: | Size: 216 B |