v1.10.0 版本更新, 提供会话治理接口

This commit is contained in:
shengzhang 2021-01-09 01:24:37 +08:00
parent 2328f9d654
commit f26424537f
21 changed files with 89 additions and 36 deletions

View File

@ -1,11 +1,11 @@
<p align="center"> <p align="center">
<img alt="logo" src="https://gitee.com/sz6/sa-token/raw/master/sa-token-doc/doc/logo.png" width="150" height="150" style="margin-bottom: 10px;"> <img alt="logo" src="https://gitee.com/sz6/sa-token/raw/master/sa-token-doc/doc/logo.png" width="150" height="150" style="margin-bottom: 10px;">
</p> </p>
<h1 align="center" style="margin: 30px 0 30px; font-weight: bold;">sa-token v1.9.0</h1> <h1 align="center" style="margin: 30px 0 30px; font-weight: bold;">sa-token v1.10.0</h1>
<h4 align="center">一个JavaWeb轻量级权限认证框架功能全面上手简单</h4> <h4 align="center">一个JavaWeb轻量级权限认证框架功能全面上手简单</h4>
<h4 align="center"> <h4 align="center">
<a href="https://gitee.com/sz6/sa-token/stargazers"><img src="https://gitee.com/sz6/sa-token/badge/star.svg"></a> <a href="https://gitee.com/sz6/sa-token/stargazers"><img src="https://gitee.com/sz6/sa-token/badge/star.svg"></a>
<a href="https://github.com/click33/sa-token"><img src="https://img.shields.io/badge/sa--token-v1.9.0-2B9939"></a> <a href="https://github.com/click33/sa-token"><img src="https://img.shields.io/badge/sa--token-v1.10.0-2B9939"></a>
<a href="https://github.com/click33/sa-token/stargazers"><img src="https://img.shields.io/github/stars/click33/sa-token"></a> <a href="https://github.com/click33/sa-token/stargazers"><img src="https://img.shields.io/github/stars/click33/sa-token"></a>
<a href="https://github.com/click33/sa-token/watchers"><img src="https://img.shields.io/github/watchers/click33/sa-token"></a> <a href="https://github.com/click33/sa-token/watchers"><img src="https://img.shields.io/github/watchers/click33/sa-token"></a>
<a href="https://github.com/click33/sa-token/network/members"><img src="https://img.shields.io/github/forks/click33/sa-token"></a> <a href="https://github.com/click33/sa-token/network/members"><img src="https://img.shields.io/github/forks/click33/sa-token"></a>

View File

@ -8,7 +8,7 @@
<groupId>cn.dev33</groupId> <groupId>cn.dev33</groupId>
<artifactId>sa-token-parent</artifactId> <artifactId>sa-token-parent</artifactId>
<packaging>pom</packaging> <packaging>pom</packaging>
<version>1.9.0</version> <version>1.10.0</version>
<!-- 项目介绍 --> <!-- 项目介绍 -->
<name>sa-token</name> <name>sa-token</name>

View File

@ -7,7 +7,7 @@
<parent> <parent>
<groupId>cn.dev33</groupId> <groupId>cn.dev33</groupId>
<artifactId>sa-token-parent</artifactId> <artifactId>sa-token-parent</artifactId>
<version>1.9.0</version> <version>1.10.0</version>
</parent> </parent>
<packaging>jar</packaging> <packaging>jar</packaging>

View File

@ -10,7 +10,7 @@ public class SaTokenConsts {
/** /**
* sa-token 版本号 * sa-token 版本号
*/ */
public static final String VERSION_NO = "v1.9.0"; public static final String VERSION_NO = "v1.10.0";
/** /**
* sa-token 开源地址 * sa-token 开源地址

View File

@ -7,7 +7,7 @@
<parent> <parent>
<groupId>cn.dev33</groupId> <groupId>cn.dev33</groupId>
<artifactId>sa-token-parent</artifactId> <artifactId>sa-token-parent</artifactId>
<version>1.9.0</version> <version>1.10.0</version>
</parent> </parent>
<packaging>jar</packaging> <packaging>jar</packaging>
@ -20,7 +20,7 @@
<dependency> <dependency>
<groupId>cn.dev33</groupId> <groupId>cn.dev33</groupId>
<artifactId>sa-token-spring-boot-starter</artifactId> <artifactId>sa-token-spring-boot-starter</artifactId>
<version>1.9.0</version> <version>1.10.0</version>
</dependency> </dependency>
<!-- RedisTemplate 相关操作API --> <!-- RedisTemplate 相关操作API -->
<dependency> <dependency>

View File

@ -124,6 +124,17 @@ public class SaTokenDaoRedisJackson implements SaTokenDao {
*/ */
@Override @Override
public void updateTimeout(String key, long timeout) { public void updateTimeout(String key, long timeout) {
// 判断是否想要设置为永久
if(timeout == SaTokenDao.NEVER_EXPIRE) {
long expire = getTimeout(key);
if(expire == SaTokenDao.NEVER_EXPIRE) {
// 如果其已经被设置为永久则不作任何处理
} else {
// 如果尚未被设置为永久那么再次set一次
this.setValue(key, this.getValue(key), timeout);
}
return;
}
stringRedisTemplate.expire(key, timeout, TimeUnit.SECONDS); stringRedisTemplate.expire(key, timeout, TimeUnit.SECONDS);
} }
@ -183,6 +194,17 @@ public class SaTokenDaoRedisJackson implements SaTokenDao {
*/ */
@Override @Override
public void updateSessionTimeout(String sessionId, long timeout) { public void updateSessionTimeout(String sessionId, long timeout) {
// 判断是否想要设置为永久
if(timeout == SaTokenDao.NEVER_EXPIRE) {
long expire = getSessionTimeout(sessionId);
if(expire == SaTokenDao.NEVER_EXPIRE) {
// 如果其已经被设置为永久则不作任何处理
} else {
// 如果尚未被设置为永久那么再次set一次
this.saveSession(this.getSession(sessionId), timeout);
}
return;
}
sessionRedisTemplate.expire(sessionId, timeout, TimeUnit.SECONDS); sessionRedisTemplate.expire(sessionId, timeout, TimeUnit.SECONDS);
} }

View File

@ -7,7 +7,7 @@
<parent> <parent>
<groupId>cn.dev33</groupId> <groupId>cn.dev33</groupId>
<artifactId>sa-token-parent</artifactId> <artifactId>sa-token-parent</artifactId>
<version>1.9.0</version> <version>1.10.0</version>
</parent> </parent>
<packaging>jar</packaging> <packaging>jar</packaging>
@ -20,7 +20,7 @@
<dependency> <dependency>
<groupId>cn.dev33</groupId> <groupId>cn.dev33</groupId>
<artifactId>sa-token-spring-boot-starter</artifactId> <artifactId>sa-token-spring-boot-starter</artifactId>
<version>1.9.0</version> <version>1.10.0</version>
</dependency> </dependency>
<!-- RedisTemplate 相关操作API --> <!-- RedisTemplate 相关操作API -->
<dependency> <dependency>

View File

@ -105,6 +105,17 @@ public class SaTokenDaoRedis implements SaTokenDao {
*/ */
@Override @Override
public void updateTimeout(String key, long timeout) { public void updateTimeout(String key, long timeout) {
// 判断是否想要设置为永久
if(timeout == SaTokenDao.NEVER_EXPIRE) {
long expire = getTimeout(key);
if(expire == SaTokenDao.NEVER_EXPIRE) {
// 如果其已经被设置为永久则不作任何处理
} else {
// 如果尚未被设置为永久那么再次set一次
this.setValue(key, this.getValue(key), timeout);
}
return;
}
stringRedisTemplate.expire(key, timeout, TimeUnit.SECONDS); stringRedisTemplate.expire(key, timeout, TimeUnit.SECONDS);
} }
@ -164,6 +175,17 @@ public class SaTokenDaoRedis implements SaTokenDao {
*/ */
@Override @Override
public void updateSessionTimeout(String sessionId, long timeout) { public void updateSessionTimeout(String sessionId, long timeout) {
// 判断是否想要设置为永久
if(timeout == SaTokenDao.NEVER_EXPIRE) {
long expire = getSessionTimeout(sessionId);
if(expire == SaTokenDao.NEVER_EXPIRE) {
// 如果其已经被设置为永久则不作任何处理
} else {
// 如果尚未被设置为永久那么再次set一次
this.saveSession(this.getSession(sessionId), timeout);
}
return;
}
sessionRedisTemplate.expire(sessionId, timeout, TimeUnit.SECONDS); sessionRedisTemplate.expire(sessionId, timeout, TimeUnit.SECONDS);
} }

View File

@ -29,21 +29,21 @@
<dependency> <dependency>
<groupId>cn.dev33</groupId> <groupId>cn.dev33</groupId>
<artifactId>sa-token-spring-boot-starter</artifactId> <artifactId>sa-token-spring-boot-starter</artifactId>
<version>1.9.0</version> <version>1.10.0</version>
</dependency> </dependency>
<!-- sa-token整合redis (使用jdk默认序列化方式) --> <!-- sa-token整合redis (使用jdk默认序列化方式) -->
<!-- <dependency> <!-- <dependency>
<groupId>cn.dev33</groupId> <groupId>cn.dev33</groupId>
<artifactId>sa-token-dao-redis</artifactId> <artifactId>sa-token-dao-redis</artifactId>
<version>1.9.0</version> <version>1.10.0</version>
</dependency> --> </dependency> -->
<!-- sa-token整合redis (使用jackson序列化方式) --> <!-- sa-token整合redis (使用jackson序列化方式) -->
<!-- <dependency> <!-- <dependency>
<groupId>cn.dev33</groupId> <groupId>cn.dev33</groupId>
<artifactId>sa-token-dao-redis-jackson</artifactId> <artifactId>sa-token-dao-redis-jackson</artifactId>
<version>1.9.0</version> <version>1.10.0</version>
</dependency> --> </dependency> -->
<!-- 提供redis连接池 --> <!-- 提供redis连接池 -->

View File

@ -27,13 +27,17 @@ public class StressTestController {
public AjaxJson login() { public AjaxJson login() {
// StpUtil.getTokenSession().logout(); // StpUtil.getTokenSession().logout();
// StpUtil.logoutByLoginId(10001); // StpUtil.logoutByLoginId(10001);
int count = 10; // 循环多少轮
int loginCount = 10000; // 每轮循环多少次
// 循环10次 取平均时间 // 循环10次 取平均时间
List<Double> list = new ArrayList<>(); List<Double> list = new ArrayList<>();
for (int i = 10; i <= 1; i++) { for (int i = 1; i <= count; i++) {
System.out.println("\n---------------------第" + i + "轮---------------------"); System.out.println("\n---------------------第" + i + "轮---------------------");
Ttime t = new Ttime().start(); Ttime t = new Ttime().start();
// 每次登录的次数 // 每次登录的次数
for (int j = 1; j <= 10000; j++) { for (int j = 1; j <= loginCount; j++) {
StpUtil.setLoginId("1000" + j, "PC-" + j); StpUtil.setLoginId("1000" + j, "PC-" + j);
if(j % 1000 == 0) { if(j % 1000 == 0) {
System.out.println("已登录:" + j); System.out.println("已登录:" + j);

View File

@ -203,13 +203,12 @@ public class TestController {
} }
// 测试 浏览器访问 http://localhost:8081/test/searchSession // 测试会话治理 浏览器访问 http://localhost:8081/test/search
// 测试前请先将 is-read-cookie 配置为 false @RequestMapping("search")
@RequestMapping("searchSession") public AjaxJson search() {
public AjaxJson searchSession() {
System.out.println("--------------"); System.out.println("--------------");
Ttime t = new Ttime().start(); Ttime t = new Ttime().start();
List<String> tokenValue = StpUtil.searchTokenValue("", 0, 10); List<String> tokenValue = StpUtil.searchTokenValue("8feb8265f773", 0, 10);
for (String v : tokenValue) { for (String v : tokenValue) {
// SaSession session = StpUtil.getSessionBySessionId(sid); // SaSession session = StpUtil.getSessionBySessionId(sid);
System.out.println(v); System.out.println(v);

View File

@ -8,7 +8,7 @@ spring:
# token名称 (同时也是cookie名称) # token名称 (同时也是cookie名称)
token-name: satoken token-name: satoken
# token有效期单位s 默认30天, -1代表永不过期 # token有效期单位s 默认30天, -1代表永不过期
timeout: 2592000 timeout: -1
# token临时有效期 (指定时间内无操作就视为token过期) 单位: 秒 # token临时有效期 (指定时间内无操作就视为token过期) 单位: 秒
activity-timeout: -1 activity-timeout: -1
# 是否允许同一账号并发登录 (为true时允许一起登录, 为false时新登录挤掉旧登录) # 是否允许同一账号并发登录 (为true时允许一起登录, 为false时新登录挤掉旧登录)
@ -18,8 +18,6 @@ spring:
# token风格 # token风格
token-style: uuid token-style: uuid
# 是否从cookie里读取token
# is-read-cookie: false
# redis配置 # redis配置

View File

@ -1,11 +1,11 @@
<p align="center"> <p align="center">
<img alt="logo" src="https://gitee.com/sz6/sa-token/raw/master/sa-token-doc/doc/logo.png" width="150" height="150" style="margin-bottom: 10px;"> <img alt="logo" src="https://gitee.com/sz6/sa-token/raw/master/sa-token-doc/doc/logo.png" width="150" height="150" style="margin-bottom: 10px;">
</p> </p>
<h1 align="center" style="margin: 30px 0 30px; font-weight: bold;">sa-token v1.9.0</h1> <h1 align="center" style="margin: 30px 0 30px; font-weight: bold;">sa-token v1.10.0</h1>
<h4 align="center">一个JavaWeb轻量级权限认证框架功能全面上手简单</h4> <h4 align="center">一个JavaWeb轻量级权限认证框架功能全面上手简单</h4>
<h4 align="center"> <h4 align="center">
<a href="https://gitee.com/sz6/sa-token/stargazers"><img src="https://gitee.com/sz6/sa-token/badge/star.svg"></a> <a href="https://gitee.com/sz6/sa-token/stargazers"><img src="https://gitee.com/sz6/sa-token/badge/star.svg"></a>
<a href="https://github.com/click33/sa-token"><img src="https://img.shields.io/badge/sa--token-v1.9.0-2B9939"></a> <a href="https://github.com/click33/sa-token"><img src="https://img.shields.io/badge/sa--token-v1.10.0-2B9939"></a>
<a href="https://github.com/click33/sa-token/stargazers"><img src="https://img.shields.io/github/stars/click33/sa-token"></a> <a href="https://github.com/click33/sa-token/stargazers"><img src="https://img.shields.io/github/stars/click33/sa-token"></a>
<a href="https://github.com/click33/sa-token/watchers"><img src="https://img.shields.io/github/watchers/click33/sa-token"></a> <a href="https://github.com/click33/sa-token/watchers"><img src="https://img.shields.io/github/watchers/click33/sa-token"></a>
<a href="https://github.com/click33/sa-token/network/members"><img src="https://img.shields.io/github/forks/click33/sa-token"></a> <a href="https://github.com/click33/sa-token/network/members"><img src="https://img.shields.io/github/forks/click33/sa-token"></a>
@ -77,7 +77,7 @@ sa-token的API众多请恕此处无法为您逐一展示更多示例请戳
## 涵盖功能 ## 涵盖功能
- **登录验证** —— 轻松登录鉴权,并提供五种细分场景值 - **登录验证** —— 轻松登录鉴权,并提供五种细分场景值
- **权限验证** —— 拦截违规调用,不同角色不同授权 - **权限验证** —— 适配RBAC模型,不同角色不同授权
- **Session会话** —— 专业的数据缓存中心 - **Session会话** —— 专业的数据缓存中心
- **踢人下线** —— 将违规用户立刻清退下线 - **踢人下线** —— 将违规用户立刻清退下线
- **模拟他人账号** —— 实时操作任意用户状态数据 - **模拟他人账号** —— 实时操作任意用户状态数据
@ -89,6 +89,7 @@ sa-token的API众多请恕此处无法为您逐一展示更多示例请戳
- **自动续签** —— 提供两种token过期策略灵活搭配使用还可自动续签 - **自动续签** —— 提供两种token过期策略灵活搭配使用还可自动续签
- **同端互斥登录** —— 像QQ一样手机电脑同时在线但是两个手机上互斥登录 - **同端互斥登录** —— 像QQ一样手机电脑同时在线但是两个手机上互斥登录
- **组件自动注入** —— 零配置与Spring等框架集成 - **组件自动注入** —— 零配置与Spring等框架集成
- **会话治理** —— 提供方便灵活的会话查询接口
- **更多功能正在集成中...** —— 如有您有好想法或者建议,欢迎加群交流 - **更多功能正在集成中...** —— 如有您有好想法或者建议,欢迎加群交流

View File

@ -7,7 +7,7 @@
<meta name="description" content="Description"> <meta name="description" content="Description">
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"> <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta name="keywords" content="sa-token|sa-token框架|sa-token文档|sa-token在线文档|权限认证框架"> <meta name="keywords" content="sa-token|sa-token框架|sa-token文档|sa-token在线文档|权限认证框架">
<meta name="description" content="sa-token是一个JavaWeb权限认证框架功能全面上手简单登录验证、权限验证、Session会话、踢人下线、集成Redis、前后台分离、模拟他人账号、多账号体系、注解式鉴权、花式token、自动续签、同端互斥登录、Spring集成...,零配置开箱即用,覆盖所有应用场景,你所需要的功能,这里都有"> <meta name="description" content="sa-token是一个JavaWeb权限认证框架功能全面上手简单登录验证、权限验证、Session会话、踢人下线、集成Redis、前后台分离、模拟他人账号、多账号体系、注解式鉴权、花式token、自动续签、同端互斥登录、会话治理、Spring集成...,零配置开箱即用,覆盖所有应用场景,你所需要的功能,这里都有">
<link rel="stylesheet" href="https://unpkg.zhimg.com/docsify@4.11.3/lib/themes/vue.css"> <link rel="stylesheet" href="https://unpkg.zhimg.com/docsify@4.11.3/lib/themes/vue.css">
<link rel="stylesheet" href="./lib/index.css"> <link rel="stylesheet" href="./lib/index.css">
<link rel="shortcut icon" type="image/x-icon" href="logo.png"> <link rel="shortcut icon" type="image/x-icon" href="logo.png">
@ -38,7 +38,7 @@
</div> </div>
<script> <script>
var name = '<img style="width: 50px; height: 50px; vertical-align: middle;" src="logo.png" alt="logo" /> '; var name = '<img style="width: 50px; height: 50px; vertical-align: middle;" src="logo.png" alt="logo" /> ';
name += '<b style="font-size: 24px; vertical-align: middle;">sa-token</b> <sub>v1.9.0</sub>' name += '<b style="font-size: 24px; vertical-align: middle;">sa-token</b> <sub>v1.10.0</sub>'
window.$docsify = { window.$docsify = {
name: name, // 名字 name: name, // 名字
repo: 'https://github.com/click33/sa-token', // github地址 repo: 'https://github.com/click33/sa-token', // github地址

View File

@ -1,5 +1,11 @@
# 更新日志 # 更新日志
### 2021-1-6 @v1.10.0
- 新增:提供查询所有会话方案 **[重要]**
- 修复修复token设置为永不过期时无法正常被顶下线的bug感谢github用户 @zjh599245299 提出的bug
### 2021-1-6 @v1.9.0 ### 2021-1-6 @v1.9.0
- 优化:`spring-boot-starter-data-redis` 由 `2.3.7.RELEASE` 改为 `2.3.3.RELEASE` - 优化:`spring-boot-starter-data-redis` 由 `2.3.7.RELEASE` 改为 `2.3.3.RELEASE`
- 修复:补上注解拦截器里漏掉验证`@SaCheckRole`的bug - 修复:补上注解拦截器里漏掉验证`@SaCheckRole`的bug

View File

@ -9,7 +9,7 @@
<dependency> <dependency>
<groupId>cn.dev33</groupId> <groupId>cn.dev33</groupId>
<artifactId>sa-token-spring-boot-starter</artifactId> <artifactId>sa-token-spring-boot-starter</artifactId>
<version>1.9.0</version> <version>1.10.0</version>
</dependency> </dependency>
``` ```

View File

@ -18,7 +18,7 @@
<dependency> <dependency>
<groupId>cn.dev33</groupId> <groupId>cn.dev33</groupId>
<artifactId>sa-token-spring-boot-starter</artifactId> <artifactId>sa-token-spring-boot-starter</artifactId>
<version>1.9.0</version> <version>1.10.0</version>
</dependency> </dependency>
``` ```

View File

@ -11,7 +11,7 @@
<dependency> <dependency>
<groupId>cn.dev33</groupId> <groupId>cn.dev33</groupId>
<artifactId>sa-token-dao-redis</artifactId> <artifactId>sa-token-dao-redis</artifactId>
<version>1.9.0</version> <version>1.10.0</version>
</dependency> </dependency>
``` ```
优点兼容性好缺点session序列化后基本不可读对开发者来讲等同于乱码 优点兼容性好缺点session序列化后基本不可读对开发者来讲等同于乱码
@ -23,7 +23,7 @@
<dependency> <dependency>
<groupId>cn.dev33</groupId> <groupId>cn.dev33</groupId>
<artifactId>sa-token-dao-redis-jackson</artifactId> <artifactId>sa-token-dao-redis-jackson</artifactId>
<version>1.9.0</version> <version>1.10.0</version>
</dependency> </dependency>
``` ```
优点session序列化后可读性强可灵活手动修改缺点兼容性稍差 优点session序列化后可读性强可灵活手动修改缺点兼容性稍差

View File

@ -14,6 +14,7 @@ StpUtil.getSession(); // 获取当前账号id的Session (
StpUtil.getSession(true); // 获取当前账号id的Session, 并决定在Session尚未创建时是否新建并返回 StpUtil.getSession(true); // 获取当前账号id的Session, 并决定在Session尚未创建时是否新建并返回
StpUtil.getSessionByLoginId(10001); // 获取账号id为10001的Session StpUtil.getSessionByLoginId(10001); // 获取账号id为10001的Session
StpUtil.getSessionByLoginId(10001, true); // 获取账号id为10001的Session, 并决定在Session尚未创建时是否新建并返回 StpUtil.getSessionByLoginId(10001, true); // 获取账号id为10001的Session, 并决定在Session尚未创建时是否新建并返回
StpUtil.getSessionBySessionId("xxxx-xxxx"); // 获取SessionId为xxxx-xxxx的Session, 在Session尚未创建时, 返回null
``` ```

View File

@ -7,7 +7,7 @@
<meta name="description" content="Description"> <meta name="description" content="Description">
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"> <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta name="keywords" content="sa-token|sa-token框架|sa-token文档|sa-token在线文档|权限认证框架"> <meta name="keywords" content="sa-token|sa-token框架|sa-token文档|sa-token在线文档|权限认证框架">
<meta name="description" content="sa-token是一个JavaWeb权限认证框架功能全面上手简单登录验证、权限验证、Session会话、踢人下线、集成Redis、前后台分离、模拟他人账号、多账号体系、注解式鉴权、花式token、自动续签、同端互斥登录、Spring集成...,零配置开箱即用,覆盖所有应用场景,你所需要的功能,这里都有"> <meta name="description" content="sa-token是一个JavaWeb权限认证框架功能全面上手简单登录验证、权限验证、Session会话、踢人下线、集成Redis、前后台分离、模拟他人账号、多账号体系、注解式鉴权、花式token、自动续签、同端互斥登录、会话治理、Spring集成...,零配置开箱即用,覆盖所有应用场景,你所需要的功能,这里都有">
<link rel="stylesheet" href="https://unpkg.zhimg.com/docsify@4.11.3/lib/themes/vue.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="doc/logo.png"> <link rel="shortcut icon" type="image/x-icon" href="doc/logo.png">
<link rel="stylesheet" href="index.css"> <link rel="stylesheet" href="index.css">
@ -43,10 +43,10 @@
<!-- 内容部分 --> <!-- 内容部分 -->
<div class="main-box"> <div class="main-box">
<div class="content-box"> <div class="content-box">
<h1>sa-token<small>v1.9.0</small></h1> <h1>sa-token<small>v1.10.0</small></h1>
<div class="sub-title">一个JavaWeb轻量级权限认证框架功能全面上手简单</div> <div class="sub-title">一个JavaWeb轻量级权限认证框架功能全面上手简单</div>
<!-- <p>0配置开箱即用低学习成本</p> --> <!-- <p>0配置开箱即用低学习成本</p> -->
<p>登录验证、权限验证、Session会话、踢人下线、集成Redis、前后台分离、模拟他人账号、多账号体系、注解式鉴权、花式token、自动续签、同端互斥登录、Spring集成...</p> <p>登录验证、权限验证、Session会话、踢人下线、集成Redis、前后台分离、模拟他人账号、多账号体系、注解式鉴权、花式token、自动续签、同端互斥登录、会话治理、Spring集成...</p>
<p>零配置开箱即用,覆盖所有应用场景,你所需要的功能,这里都有</p> <p>零配置开箱即用,覆盖所有应用场景,你所需要的功能,这里都有</p>
<div class="btn-box"> <div class="btn-box">
<a href="https://github.com/click33/sa-token" target="_blank">GitHub</a> <a href="https://github.com/click33/sa-token" target="_blank">GitHub</a>

View File

@ -7,7 +7,7 @@
<parent> <parent>
<groupId>cn.dev33</groupId> <groupId>cn.dev33</groupId>
<artifactId>sa-token-parent</artifactId> <artifactId>sa-token-parent</artifactId>
<version>1.9.0</version> <version>1.10.0</version>
</parent> </parent>
<packaging>jar</packaging> <packaging>jar</packaging>
@ -19,7 +19,7 @@
<dependency> <dependency>
<groupId>cn.dev33</groupId> <groupId>cn.dev33</groupId>
<artifactId>sa-token-core</artifactId> <artifactId>sa-token-core</artifactId>
<version>1.9.0</version> <version>1.10.0</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>