mirror of
https://gitee.com/dromara/sa-token.git
synced 2025-04-05 17:37:53 +08:00
v.1.30.0 release
This commit is contained in:
parent
3d75eca892
commit
be499e011b
75
README.md
75
README.md
@ -1,7 +1,7 @@
|
||||
<p align="center">
|
||||
<img alt="logo" src="https://sa-token.dev33.cn/doc/logo.png" width="150" height="150">
|
||||
</p>
|
||||
<h1 align="center" style="margin: 30px 0 30px; font-weight: bold;">Sa-Token v1.30.0.RC</h1>
|
||||
<h1 align="center" style="margin: 30px 0 30px; font-weight: bold;">Sa-Token v1.30.0</h1>
|
||||
<h4 align="center">一个轻量级 Java 权限认证框架,让鉴权变得简单、优雅!</h4>
|
||||
<p align="center">
|
||||
<a href="https://gitee.com/dromara/sa-token/stargazers"><img src="https://gitee.com/dromara/sa-token/badge/star.svg?theme=gvp"></a>
|
||||
@ -28,64 +28,6 @@
|
||||
**Sa-Token** 是一个轻量级 Java 权限认证框架,主要解决:**`登录认证`**、**`权限认证`**、**`Session会话`**、**`单点登录`**、**`OAuth2.0`**、**`微服务网关鉴权`**
|
||||
等一系列权限相关问题。
|
||||
|
||||
Sa-Token 的 API 设计非常简单,有多简单呢?以登录认证为例,你只需要:
|
||||
|
||||
``` java
|
||||
// 在登录时写入当前会话的账号id
|
||||
StpUtil.login(10001);
|
||||
|
||||
// 然后在需要校验登录处调用以下方法:
|
||||
// 如果当前会话未登录,这句代码会抛出 `NotLoginException` 异常
|
||||
StpUtil.checkLogin();
|
||||
```
|
||||
|
||||
至此,我们已经借助 Sa-Token 完成登录认证!
|
||||
|
||||
此时的你小脑袋可能飘满了问号,就这么简单?自定义 Realm 呢?全局过滤器呢?我不用写各种配置文件吗?
|
||||
|
||||
没错,在 Sa-Token 中,登录认证就是如此简单,不需要任何的复杂前置工作,只需这一行简单的API调用,就可以完成会话登录认证!
|
||||
|
||||
当你受够 Shiro、SpringSecurity 等框架的三拜九叩之后,你就会明白,相对于这些传统老牌框架,Sa-Token 的 API 设计是多么的简单、优雅!
|
||||
|
||||
权限认证示例(只有具备 `user:add` 权限的会话才可以进入请求)
|
||||
``` java
|
||||
@SaCheckPermission("user:add")
|
||||
@RequestMapping("/user/insert")
|
||||
public String insert(SysUser user) {
|
||||
// ...
|
||||
return "用户增加";
|
||||
}
|
||||
```
|
||||
|
||||
将某个账号踢下线(待到对方再次访问系统时会抛出`NotLoginException`异常)
|
||||
``` java
|
||||
// 将账号id为 10001 的会话踢下线
|
||||
StpUtil.kickout(10001);
|
||||
```
|
||||
|
||||
在 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 的用法。
|
||||
|
||||
|
||||
## Sa-Token 功能一览
|
||||
|
||||
- **登录认证** —— 单端登录、多端登录、同端互斥登录、七天内免登录
|
||||
- **权限认证** —— 权限认证、角色认证、会话二级认证
|
||||
@ -119,7 +61,7 @@ StpUtil.switchTo(10044); // 将当前会话身份临时切换为其它账号
|
||||
|
||||
|
||||
## Sa-Token-SSO 单点登录
|
||||
网上的单点登录教程大多以CAS流程为主,其实对于不同的系统架构,实现单点登录的步骤也大为不同,Sa-Token由简入难将其划分为三种模式:
|
||||
Sa-Token-SSO 由简入难划分为三种模式,解决不同架构下的 SSO 接入问题:
|
||||
|
||||
| 系统架构 | 采用模式 | 简介 | 文档链接 |
|
||||
| :-------- | :-------- | :-------- | :-------- |
|
||||
@ -131,8 +73,6 @@ StpUtil.switchTo(10044); // 将当前会话身份临时切换为其它账号
|
||||
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)
|
||||
3. 如果既无法做到前端同域,也无法做到后端同Redis,那么只能走模式三,Http请求获取会话(Sa-Token对SSO提供了完整的封装,你只需要按照示例从文档上复制几段代码便可以轻松集成)
|
||||
4. 技术选型一定要根据系统架构对症下药,切不可胡乱选择
|
||||
|
||||
|
||||
## Sa-Token-OAuth2.0 授权登录
|
||||
Sa-OAuth2 模块基于 [RFC-6749 标准](https://tools.ietf.org/html/rfc6749) 编写,通过Sa-OAuth2你可以非常轻松的实现系统的OAuth2.0授权认证
|
||||
@ -154,12 +94,6 @@ Sa-OAuth2 模块基于 [RFC-6749 标准](https://tools.ietf.org/html/rfc6749)
|
||||

|
||||
|
||||
|
||||
## Star 趋势
|
||||
[](https://giteye.net/chart/77YQZ6UK)
|
||||
|
||||
[](https://starchart.cc/dromara/sa-token)
|
||||
|
||||
|
||||
## 使用Sa-Token的开源项目
|
||||
- [[ sa-plus ]](https://gitee.com/click33/sa-plus):一个基于 SpringBoot 架构的快速开发框架,内置代码生成器
|
||||
|
||||
@ -201,11 +135,6 @@ Sa-OAuth2 模块基于 [RFC-6749 标准](https://tools.ietf.org/html/rfc6749)
|
||||
- [[ TLog ]](https://gitee.com/dromara/TLog):一个轻量级的分布式日志标记追踪神器
|
||||
|
||||
|
||||
## 贡献者名单
|
||||
感谢每一个为 Sa-Token 贡献代码的小伙伴
|
||||
|
||||
[](https://giteye.net/chart/CGZ7GT8E)
|
||||
|
||||
|
||||
## 交流群
|
||||
QQ交流群:1群:1002350610 (已满) 、
|
||||
|
2
pom.xml
2
pom.xml
@ -37,7 +37,7 @@
|
||||
|
||||
<!-- 一些属性 -->
|
||||
<properties>
|
||||
<revision>1.30.0.RC</revision>
|
||||
<revision>1.30.0</revision>
|
||||
<jdk.version>1.8</jdk.version>
|
||||
<project.build.sourceEncoding>utf-8</project.build.sourceEncoding>
|
||||
<project.reporting.outputEncoding>utf-8</project.reporting.outputEncoding>
|
||||
|
@ -1,54 +0,0 @@
|
||||
//package cn.dev33.satoken.action;
|
||||
//
|
||||
//import java.lang.reflect.AnnotatedElement;
|
||||
//import java.lang.reflect.Method;
|
||||
//import java.util.List;
|
||||
//
|
||||
//import cn.dev33.satoken.session.SaSession;
|
||||
//
|
||||
///**
|
||||
// * <h1> v1.27+ 此接口已废弃,目前版本暂时向下兼容,请及时更换为 SaStrategy </h1>
|
||||
// * <p>Sa-Token 逻辑代理接口 </p>
|
||||
// * <p>此接口将会代理框架内部的一些关键性逻辑,方便开发者进行按需重写</p>
|
||||
// * @author kong
|
||||
// *
|
||||
// */
|
||||
//@Deprecated
|
||||
//public interface SaTokenAction {
|
||||
//
|
||||
// /**
|
||||
// * 创建一个Token
|
||||
// * @param loginId 账号id
|
||||
// * @param loginType 账号类型
|
||||
// * @return token
|
||||
// */
|
||||
// public String createToken(Object loginId, String loginType);
|
||||
//
|
||||
// /**
|
||||
// * 创建一个Session
|
||||
// * @param sessionId Session的Id
|
||||
// * @return 创建后的Session
|
||||
// */
|
||||
// public SaSession createSession(String sessionId);
|
||||
//
|
||||
// /**
|
||||
// * 判断:集合中是否包含指定元素(模糊匹配)
|
||||
// * @param list 集合
|
||||
// * @param element 元素
|
||||
// * @return 是否包含
|
||||
// */
|
||||
// public boolean hasElement(List<String> list, String element);
|
||||
//
|
||||
// /**
|
||||
// * 对一个Method对象进行注解检查(注解鉴权内部实现)
|
||||
// * @param method Method对象
|
||||
// */
|
||||
// public void checkMethodAnnotation(Method method);
|
||||
//
|
||||
// /**
|
||||
// * 从指定元素校验注解
|
||||
// * @param target /
|
||||
// */
|
||||
// public void validateAnnotation(AnnotatedElement target);
|
||||
//
|
||||
//}
|
@ -1,150 +0,0 @@
|
||||
//package cn.dev33.satoken.action;
|
||||
//
|
||||
//import java.lang.reflect.AnnotatedElement;
|
||||
//import java.lang.reflect.Method;
|
||||
//import java.util.List;
|
||||
//import java.util.UUID;
|
||||
//
|
||||
//import cn.dev33.satoken.SaManager;
|
||||
//import cn.dev33.satoken.annotation.SaCheckBasic;
|
||||
//import cn.dev33.satoken.annotation.SaCheckLogin;
|
||||
//import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
//import cn.dev33.satoken.annotation.SaCheckRole;
|
||||
//import cn.dev33.satoken.annotation.SaCheckSafe;
|
||||
//import cn.dev33.satoken.basic.SaBasicUtil;
|
||||
//import cn.dev33.satoken.session.SaSession;
|
||||
//import cn.dev33.satoken.strategy.SaStrategy;
|
||||
//import cn.dev33.satoken.util.SaFoxUtil;
|
||||
//import cn.dev33.satoken.util.SaTokenConsts;
|
||||
//
|
||||
///**
|
||||
// * <h1> v1.27+ 此接口已废弃,目前版本暂时向下兼容,请及时更换为 SaStrategy </h1>
|
||||
// * <p> Sa-Token 逻辑代理接口 [默认实现类] </p>
|
||||
// * @author kong
|
||||
// *
|
||||
// */
|
||||
//@Deprecated
|
||||
//public class SaTokenActionDefaultImpl implements SaTokenAction {
|
||||
//
|
||||
// /**
|
||||
// * 创建一个Token
|
||||
// */
|
||||
// @Override
|
||||
// public String createToken(Object loginId, String loginType) {
|
||||
// // 根据配置的tokenStyle生成不同风格的token
|
||||
// String tokenStyle = SaManager.getConfig().getTokenStyle();
|
||||
// // uuid
|
||||
// if(SaTokenConsts.TOKEN_STYLE_UUID.equals(tokenStyle)) {
|
||||
// return UUID.randomUUID().toString();
|
||||
// }
|
||||
// // 简单uuid (不带下划线)
|
||||
// if(SaTokenConsts.TOKEN_STYLE_SIMPLE_UUID.equals(tokenStyle)) {
|
||||
// return UUID.randomUUID().toString().replaceAll("-", "");
|
||||
// }
|
||||
// // 32位随机字符串
|
||||
// if(SaTokenConsts.TOKEN_STYLE_RANDOM_32.equals(tokenStyle)) {
|
||||
// return SaFoxUtil.getRandomString(32);
|
||||
// }
|
||||
// // 64位随机字符串
|
||||
// if(SaTokenConsts.TOKEN_STYLE_RANDOM_64.equals(tokenStyle)) {
|
||||
// return SaFoxUtil.getRandomString(64);
|
||||
// }
|
||||
// // 128位随机字符串
|
||||
// if(SaTokenConsts.TOKEN_STYLE_RANDOM_128.equals(tokenStyle)) {
|
||||
// return SaFoxUtil.getRandomString(128);
|
||||
// }
|
||||
// // tik风格 (2_14_16)
|
||||
// if(SaTokenConsts.TOKEN_STYLE_TIK.equals(tokenStyle)) {
|
||||
// return SaFoxUtil.getRandomString(2) + "_" + SaFoxUtil.getRandomString(14) + "_" + SaFoxUtil.getRandomString(16) + "__";
|
||||
// }
|
||||
// // 默认,还是uuid
|
||||
// return UUID.randomUUID().toString();
|
||||
// }
|
||||
//
|
||||
// /**
|
||||
// * 创建一个Session
|
||||
// */
|
||||
// @Override
|
||||
// public SaSession createSession(String sessionId) {
|
||||
// return new SaSession(sessionId);
|
||||
// }
|
||||
//
|
||||
// /**
|
||||
// * 判断:集合中是否包含指定元素(模糊匹配)
|
||||
// */
|
||||
// @Override
|
||||
// public boolean hasElement(List<String> list, String element) {
|
||||
//
|
||||
// // 空集合直接返回false
|
||||
// if(list == null || list.size() == 0) {
|
||||
// return false;
|
||||
// }
|
||||
//
|
||||
// // 先尝试一下简单匹配,如果可以匹配成功则无需继续模糊匹配
|
||||
// if (list.contains(element)) {
|
||||
// return true;
|
||||
// }
|
||||
//
|
||||
// // 开始模糊匹配
|
||||
// for (String patt : list) {
|
||||
// if(SaFoxUtil.vagueMatch(patt, element)) {
|
||||
// return true;
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// // 走出for循环说明没有一个元素可以匹配成功
|
||||
// return false;
|
||||
// }
|
||||
//
|
||||
// /**
|
||||
// * 对一个Method对象进行注解检查(注解鉴权内部实现)
|
||||
// */
|
||||
// @Override
|
||||
// public void checkMethodAnnotation(Method method) {
|
||||
//
|
||||
// // 先校验 Method 所属 Class 上的注解
|
||||
// validateAnnotation(method.getDeclaringClass());
|
||||
//
|
||||
// // 再校验 Method 上的注解
|
||||
// validateAnnotation(method);
|
||||
// }
|
||||
//
|
||||
// /**
|
||||
// * 从指定元素校验注解
|
||||
// * @param target see note
|
||||
// */
|
||||
// public void validateAnnotation(AnnotatedElement target) {
|
||||
//
|
||||
// // 校验 @SaCheckLogin 注解
|
||||
// SaCheckLogin checkLogin = (SaCheckLogin) SaStrategy.me.getAnnotation.apply(target, SaCheckLogin.class);
|
||||
// if(checkLogin != null) {
|
||||
// SaManager.getStpLogic(checkLogin.type()).checkByAnnotation(checkLogin);
|
||||
// }
|
||||
//
|
||||
// // 校验 @SaCheckRole 注解
|
||||
// SaCheckRole checkRole = (SaCheckRole) SaStrategy.me.getAnnotation.apply(target, SaCheckRole.class);
|
||||
// if(checkRole != null) {
|
||||
// SaManager.getStpLogic(checkRole.type()).checkByAnnotation(checkRole);
|
||||
// }
|
||||
//
|
||||
// // 校验 @SaCheckPermission 注解
|
||||
// SaCheckPermission checkPermission = (SaCheckPermission) SaStrategy.me.getAnnotation.apply(target, SaCheckPermission.class);
|
||||
// if(checkPermission != null) {
|
||||
// SaManager.getStpLogic(checkPermission.type()).checkByAnnotation(checkPermission);
|
||||
// }
|
||||
//
|
||||
// // 校验 @SaCheckSafe 注解
|
||||
// SaCheckSafe checkSafe = (SaCheckSafe) SaStrategy.me.getAnnotation.apply(target, SaCheckSafe.class);
|
||||
// if(checkSafe != null) {
|
||||
// SaManager.getStpLogic(checkSafe.type()).checkByAnnotation(checkSafe);
|
||||
// }
|
||||
//
|
||||
// // 校验 @SaCheckBasic 注解
|
||||
// SaCheckBasic checkBasic = (SaCheckBasic) SaStrategy.me.getAnnotation.apply(target, SaCheckBasic.class);
|
||||
// if(checkBasic != null) {
|
||||
// SaBasicUtil.check(checkBasic.realm(), checkBasic.account());
|
||||
// }
|
||||
//
|
||||
// }
|
||||
//
|
||||
//}
|
@ -13,7 +13,7 @@ public class SaTokenConsts {
|
||||
/**
|
||||
* Sa-Token 当前版本号
|
||||
*/
|
||||
public static final String VERSION_NO = "v1.30.0.RC";
|
||||
public static final String VERSION_NO = "v1.30.0";
|
||||
|
||||
/**
|
||||
* Sa-Token 开源地址 Gitee
|
||||
|
@ -16,7 +16,7 @@
|
||||
|
||||
<!-- 定义sa-token版本号 -->
|
||||
<properties>
|
||||
<sa-token-version>1.30.0.RC</sa-token-version>
|
||||
<sa-token-version>1.30.0</sa-token-version>
|
||||
</properties>
|
||||
|
||||
<dependencies>
|
||||
|
@ -16,7 +16,7 @@
|
||||
<properties>
|
||||
<java.version>1.8</java.version>
|
||||
<maven-jar-plugin.version>3.1.1</maven-jar-plugin.version>
|
||||
<sa-token-version>1.30.0.RC</sa-token-version>
|
||||
<sa-token-version>1.30.0</sa-token-version>
|
||||
</properties>
|
||||
|
||||
<dependencies>
|
||||
|
@ -16,7 +16,7 @@
|
||||
<properties>
|
||||
<java.version>1.8</java.version>
|
||||
<maven-jar-plugin.version>3.1.1</maven-jar-plugin.version>
|
||||
<sa-token-version>1.30.0.RC</sa-token-version>
|
||||
<sa-token-version>1.30.0</sa-token-version>
|
||||
</properties>
|
||||
|
||||
<dependencies>
|
||||
|
@ -16,7 +16,7 @@
|
||||
|
||||
<!-- 定义sa-token版本号 -->
|
||||
<properties>
|
||||
<sa-token-version>1.30.0.RC</sa-token-version>
|
||||
<sa-token-version>1.30.0</sa-token-version>
|
||||
</properties>
|
||||
|
||||
<dependencies>
|
||||
|
@ -17,7 +17,7 @@
|
||||
<java.version>1.8</java.version>
|
||||
<maven-jar-plugin.version>3.1.1</maven-jar-plugin.version>
|
||||
<!-- 定义sa-token版本号 -->
|
||||
<sa-token-version>1.30.0.RC</sa-token-version>
|
||||
<sa-token-version>1.30.0</sa-token-version>
|
||||
</properties>
|
||||
|
||||
<dependencies>
|
||||
|
@ -17,7 +17,7 @@
|
||||
<java.version>1.8</java.version>
|
||||
<maven-jar-plugin.version>3.1.1</maven-jar-plugin.version>
|
||||
<!-- 定义sa-token版本号 -->
|
||||
<sa-token-version>1.30.0.RC</sa-token-version>
|
||||
<sa-token-version>1.30.0</sa-token-version>
|
||||
</properties>
|
||||
|
||||
<dependencies>
|
||||
|
@ -16,7 +16,7 @@
|
||||
|
||||
<!-- 定义sa-token版本号 -->
|
||||
<properties>
|
||||
<sa-token-version>1.30.0.RC</sa-token-version>
|
||||
<sa-token-version>1.30.0</sa-token-version>
|
||||
</properties>
|
||||
|
||||
<dependencies>
|
||||
|
@ -9,7 +9,7 @@
|
||||
|
||||
<!-- 定义sa-token版本号 -->
|
||||
<properties>
|
||||
<sa-token-version>1.30.0.RC</sa-token-version>
|
||||
<sa-token-version>1.30.0</sa-token-version>
|
||||
</properties>
|
||||
|
||||
<dependencies>
|
||||
|
@ -17,7 +17,7 @@
|
||||
|
||||
<!-- 定义sa-token版本号 -->
|
||||
<properties>
|
||||
<sa-token-version>1.30.0.RC</sa-token-version>
|
||||
<sa-token-version>1.30.0</sa-token-version>
|
||||
</properties>
|
||||
|
||||
<dependencies>
|
||||
|
@ -1,62 +0,0 @@
|
||||
package com.pj;
|
||||
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import cn.dev33.satoken.listener.SaTokenListener;
|
||||
import cn.dev33.satoken.stp.SaLoginModel;
|
||||
|
||||
/**
|
||||
* 自定义侦听器的实现
|
||||
*/
|
||||
@Component
|
||||
public class MySaTokenListener implements SaTokenListener {
|
||||
|
||||
/** 每次登录时触发 */
|
||||
@Override
|
||||
public void doLogin(String loginType, Object loginId, String tokenValue, SaLoginModel loginModel) {
|
||||
// ...
|
||||
}
|
||||
|
||||
/** 每次注销时触发 */
|
||||
@Override
|
||||
public void doLogout(String loginType, Object loginId, String tokenValue) {
|
||||
// ...
|
||||
}
|
||||
|
||||
/** 每次被踢下线时触发 */
|
||||
@Override
|
||||
public void doKickout(String loginType, Object loginId, String tokenValue) {
|
||||
// ...
|
||||
}
|
||||
|
||||
/** 每次被顶下线时触发 */
|
||||
@Override
|
||||
public void doReplaced(String loginType, Object loginId, String tokenValue) {
|
||||
// ...
|
||||
}
|
||||
|
||||
/** 每次被封禁时触发 */
|
||||
@Override
|
||||
public void doDisable(String loginType, Object loginId, long disableTime) {
|
||||
// ...
|
||||
}
|
||||
|
||||
/** 每次被解封时触发 */
|
||||
@Override
|
||||
public void doUntieDisable(String loginType, Object loginId) {
|
||||
// ...
|
||||
}
|
||||
|
||||
/** 每次创建Session时触发 */
|
||||
@Override
|
||||
public void doCreateSession(String id) {
|
||||
// ...
|
||||
}
|
||||
|
||||
/** 每次注销Session时触发 */
|
||||
@Override
|
||||
public void doLogoutSession(String id) {
|
||||
// ...
|
||||
}
|
||||
|
||||
}
|
@ -17,7 +17,7 @@
|
||||
|
||||
<!-- 定义sa-token版本号 -->
|
||||
<properties>
|
||||
<sa-token-version>1.30.0.RC</sa-token-version>
|
||||
<sa-token-version>1.30.0</sa-token-version>
|
||||
</properties>
|
||||
|
||||
<dependencies>
|
||||
|
@ -16,7 +16,7 @@
|
||||
|
||||
<!-- 定义sa-token版本号 -->
|
||||
<properties>
|
||||
<sa-token-version>1.30.0.RC</sa-token-version>
|
||||
<sa-token-version>1.30.0</sa-token-version>
|
||||
</properties>
|
||||
|
||||
<dependencies>
|
||||
|
@ -16,7 +16,7 @@
|
||||
|
||||
<!-- 定义sa-token版本号 -->
|
||||
<properties>
|
||||
<sa-token-version>1.30.0.RC</sa-token-version>
|
||||
<sa-token-version>1.30.0</sa-token-version>
|
||||
</properties>
|
||||
|
||||
<dependencies>
|
||||
|
@ -16,7 +16,7 @@
|
||||
|
||||
<!-- 定义sa-token版本号 -->
|
||||
<properties>
|
||||
<sa-token-version>1.30.0.RC</sa-token-version>
|
||||
<sa-token-version>1.30.0</sa-token-version>
|
||||
</properties>
|
||||
|
||||
<dependencies>
|
||||
|
@ -16,7 +16,7 @@
|
||||
|
||||
<!-- 定义sa-token版本号 -->
|
||||
<properties>
|
||||
<sa-token-version>1.30.0.RC</sa-token-version>
|
||||
<sa-token-version>1.30.0</sa-token-version>
|
||||
</properties>
|
||||
|
||||
<dependencies>
|
||||
|
@ -16,7 +16,7 @@
|
||||
|
||||
<!-- 定义sa-token版本号 -->
|
||||
<properties>
|
||||
<sa-token-version>1.30.0.RC</sa-token-version>
|
||||
<sa-token-version>1.30.0</sa-token-version>
|
||||
</properties>
|
||||
|
||||
<dependencies>
|
||||
|
@ -16,7 +16,7 @@
|
||||
|
||||
<!-- 定义sa-token版本号 -->
|
||||
<properties>
|
||||
<sa-token-version>1.30.0.RC</sa-token-version>
|
||||
<sa-token-version>1.30.0</sa-token-version>
|
||||
</properties>
|
||||
|
||||
<dependencies>
|
||||
|
@ -17,7 +17,7 @@
|
||||
|
||||
<!-- 定义sa-token版本号 -->
|
||||
<properties>
|
||||
<sa-token-version>1.30.0.RC</sa-token-version>
|
||||
<sa-token-version>1.30.0</sa-token-version>
|
||||
</properties>
|
||||
|
||||
<dependencies>
|
||||
|
@ -17,7 +17,7 @@
|
||||
|
||||
<!-- 定义sa-token版本号 -->
|
||||
<properties>
|
||||
<sa-token-version>1.30.0.RC</sa-token-version>
|
||||
<sa-token-version>1.30.0</sa-token-version>
|
||||
</properties>
|
||||
|
||||
<dependencies>
|
||||
|
@ -1,7 +1,7 @@
|
||||
<p align="center">
|
||||
<img alt="logo" src="https://sa-token.dev33.cn/doc/logo.png" width="150" height="150">
|
||||
</p>
|
||||
<h1 align="center" style="margin: 30px 0 30px; font-weight: bold;">Sa-Token v1.30.0.RC</h1>
|
||||
<h1 align="center" style="margin: 30px 0 30px; font-weight: bold;">Sa-Token v1.30.0</h1>
|
||||
<h5 align="center">一个轻量级 Java 权限认证框架,让鉴权变得简单、优雅!</h5>
|
||||
<p align="center" class="badge-box">
|
||||
<a href="https://gitee.com/dromara/sa-token/stargazers"><img src="https://gitee.com/dromara/sa-token/badge/star.svg?theme=gvp"></a>
|
||||
@ -122,10 +122,6 @@ StpUtil.switchTo(10044); // 将当前会话身份临时切换为其它账号
|
||||
|
||||
<p class="un-dec-a-pre"></p>
|
||||
|
||||
[](https://giteye.net/chart/77YQZ6UK)
|
||||
|
||||
<p class="un-dec-a-pre"></p>
|
||||
|
||||
[](https://starchart.cc/dromara/sa-token)
|
||||
|
||||
如果 Sa-Token 帮助到了您,希望您可以为其点上一个 `star`:
|
||||
@ -133,19 +129,10 @@ StpUtil.switchTo(10044); // 将当前会话身份临时切换为其它账号
|
||||
[GitHub](https://github.com/dromara/sa-token)
|
||||
|
||||
|
||||
|
||||
|
||||
## 使用Sa-Token的开源项目
|
||||
参考:[Sa-Token 生态](/more/link)
|
||||
|
||||
|
||||
## 贡献者名单
|
||||
感谢每一个为 Sa-Token 贡献代码的小伙伴
|
||||
|
||||
<p class="un-dec-a-pre"></p>
|
||||
|
||||
[](https://giteye.net/chart/CGZ7GT8E)
|
||||
|
||||
## 交流群
|
||||
QQ交流群:1群:1002350610 (已满) 、
|
||||
2群:614714762 [点击加入](https://jq.qq.com/?_wv=1027&k=b759RZrL)
|
||||
|
@ -20,7 +20,7 @@
|
||||
<div class="logo-box">
|
||||
<img src="logo.png" title="logo" />
|
||||
<h1 class="logo-text">Sa-Token</h1>
|
||||
<sub>v1.30.0.RC</sub>
|
||||
<sub>v1.30.0</sub>
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
@ -114,7 +114,7 @@
|
||||
<!-- -->
|
||||
<script src="./lib/docsify-plugin.js"></script>
|
||||
<script>
|
||||
var saTokenTopVersion = '1.30.0.RC'; // Sa-Token最新版本
|
||||
var saTokenTopVersion = '1.30.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 = {
|
||||
|
@ -1,7 +1,7 @@
|
||||
# 更新日志
|
||||
|
||||
|
||||
### 2022-05-01 @v1.30.0
|
||||
### 2022-05-9 @v1.30.0
|
||||
- 新增:新增集成 Web-Socket 鉴权示例。 **[重要]**
|
||||
- 新增:新增集成 Web-Socket(Spring封装版) 鉴权示例。
|
||||
- 新增:新增 jfinal 集成包 `sa-token-jfinal-plugin` **[重要]**
|
||||
|
@ -23,7 +23,7 @@
|
||||
<img src="./doc/logo.png" title="logo" />
|
||||
<span class="logo-text">Sa-Token</span>
|
||||
<!-- <h1 class="logo-text">Sa-Token</h1> -->
|
||||
<!-- <sub>v1.30.0.RC</sub> -->
|
||||
<!-- <sub>v1.30.0</sub> -->
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
@ -69,7 +69,7 @@
|
||||
<div class="main-box">
|
||||
<div class="content-box">
|
||||
<div class="fenge"></div>
|
||||
<h1>Sa-Token<small>v1.30.0.RC</small></h1>
|
||||
<h1>Sa-Token<small>v1.30.0</small></h1>
|
||||
<div class="sub-title">一个轻量级 java 权限认证框架,让鉴权变得简单、优雅!</div>
|
||||
<div class="btn-box">
|
||||
<a href="https://github.com/dromara/sa-token" target="_blank">GitHub</a>
|
||||
|
Loading…
Reference in New Issue
Block a user