mirror of
https://gitee.com/dromara/sa-token.git
synced 2026-02-27 16:50:24 +08:00
Compare commits
13 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
1df216879c | ||
|
|
91998af186 | ||
|
|
f33df38f64 | ||
|
|
aaf4bb8931 | ||
|
|
5808710bbf | ||
|
|
62787c3257 | ||
|
|
6dd39505f9 | ||
|
|
d86f72b469 | ||
|
|
7b7920123a | ||
|
|
8872982455 | ||
|
|
80f07ae01e | ||
|
|
540730d9a4 | ||
|
|
03c8abb269 |
@@ -58,6 +58,8 @@ sa-token是一个轻量级Java权限认证框架,主要解决:登录认证
|
||||
- **路由拦截式鉴权** —— 根据路由拦截鉴权,可适配restful模式
|
||||
- **自动续签** —— 提供两种token过期策略,灵活搭配使用,还可自动续签
|
||||
- **会话治理** —— 提供方便灵活的会话查询接口
|
||||
- **记住我模式** —— 适配[记住我]模式,重启浏览器免验证
|
||||
- **密码加密** —— 提供密码加密模块,可快速MD5、SHA1、SHA256、AES、RSA加密
|
||||
- **组件自动注入** —— 零配置与Spring等框架集成
|
||||
- **更多功能正在集成中...** —— 如有您有好想法或者建议,欢迎加群交流
|
||||
|
||||
@@ -180,7 +182,9 @@ sa-token秉承着开放的思想,欢迎大家贡献代码,为框架添砖加
|
||||
|
||||
|
||||
## 友情链接
|
||||
[**[ okhttps ]** 一个轻量级http通信框架,API设计无比优雅,支持 WebSocket 以及 Stomp 协议](https://gitee.com/ejlchina-zhxu/okhttps)
|
||||
[**[ OkHttps ]** 一个轻量级http通信框架,API设计无比优雅,支持 WebSocket 以及 Stomp 协议](https://gitee.com/ejlchina-zhxu/okhttps)
|
||||
|
||||
[**[ 小诺快速开发平台 ]** 基于SpringBoot2 + AntDesignVue全新快速开发平台,同时拥有三个版本](https://xiaonuo.vip/index#pricing)
|
||||
|
||||
|
||||
## 交流群
|
||||
|
||||
@@ -44,7 +44,7 @@ public class SaTokenCookieUtil {
|
||||
*/
|
||||
public static void addCookie(HttpServletResponse response, String name, String value, String path, String domain, int timeout) {
|
||||
Cookie cookie = new Cookie(name, value);
|
||||
if(SaTokenInsideUtil.isEmpty(path) == false) {
|
||||
if(SaTokenInsideUtil.isEmpty(path) == true) {
|
||||
path = "/";
|
||||
}
|
||||
if(SaTokenInsideUtil.isEmpty(domain) == false) {
|
||||
@@ -95,4 +95,4 @@ public class SaTokenCookieUtil {
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -240,7 +240,7 @@ public class SaSession implements Serializable {
|
||||
// ----------------------- 存取值 (类型转换)
|
||||
|
||||
/**
|
||||
* 从Session中取值,转化为Object类型
|
||||
* 从Session中取值,并转化为Object类型
|
||||
* @param key key
|
||||
* @return 值
|
||||
*/
|
||||
@@ -248,6 +248,32 @@ public class SaSession implements Serializable {
|
||||
return getAttribute(key);
|
||||
}
|
||||
|
||||
/**
|
||||
* 从Session中取值,并转化为String类型
|
||||
* @param key key
|
||||
* @return 值
|
||||
*/
|
||||
public String getString(String key) {
|
||||
Object value = getObject(key);
|
||||
if(value == null) {
|
||||
return null;
|
||||
}
|
||||
return String.valueOf(value);
|
||||
}
|
||||
|
||||
/**
|
||||
* 从Session中取值,并转化为int类型,如果value为空,则返回0
|
||||
* @param key key
|
||||
* @return 值
|
||||
*/
|
||||
public int getInt(String key) {
|
||||
Object value = getObject(key);
|
||||
if(valueIsNull(value)) {
|
||||
return 0;
|
||||
}
|
||||
return Integer.valueOf(String.valueOf(value));
|
||||
}
|
||||
|
||||
/**
|
||||
* 判断一个值是否为null
|
||||
* @param value 指定值
|
||||
|
||||
@@ -8,7 +8,7 @@ import cn.dev33.satoken.SaTokenManager;
|
||||
@SpringBootApplication
|
||||
public class SaTokenDemoApplication {
|
||||
|
||||
public static void main(String[] args) throws Exception {
|
||||
public static void main(String[] args) {
|
||||
SpringApplication.run(SaTokenDemoApplication.class, args);
|
||||
System.out.println("\n启动成功:sa-token配置如下:" + SaTokenManager.getConfig());
|
||||
}
|
||||
|
||||
@@ -9,6 +9,8 @@ import cn.dev33.satoken.interceptor.SaAnnotationInterceptor;
|
||||
|
||||
/**
|
||||
* sa-token代码方式进行配置
|
||||
* @author kong
|
||||
*
|
||||
*/
|
||||
@Configuration
|
||||
public class MySaTokenConfig implements WebMvcConfigurer {
|
||||
@@ -34,5 +36,4 @@ public class MySaTokenConfig implements WebMvcConfigurer {
|
||||
registry.addInterceptor(new SaAnnotationInterceptor()).addPathPatterns("/**");
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -58,6 +58,8 @@ sa-token是一个轻量级Java权限认证框架,主要解决:登录认证
|
||||
- **路由拦截式鉴权** —— 根据路由拦截鉴权,可适配restful模式
|
||||
- **自动续签** —— 提供两种token过期策略,灵活搭配使用,还可自动续签
|
||||
- **会话治理** —— 提供方便灵活的会话查询接口
|
||||
- **记住我模式** —— 适配[记住我]模式,重启浏览器免验证
|
||||
- **密码加密** —— 提供密码加密模块,可快速MD5、SHA1、SHA256、AES、RSA加密
|
||||
- **组件自动注入** —— 零配置与Spring等框架集成
|
||||
- **更多功能正在集成中...** —— 如有您有好想法或者建议,欢迎加群交流
|
||||
|
||||
@@ -182,6 +184,7 @@ sa-token秉承着开放的思想,欢迎大家贡献代码,为框架添砖加
|
||||
## 友情链接
|
||||
[**[ okhttps ]** 一个轻量级http通信框架,API设计无比优雅,支持 WebSocket 以及 Stomp 协议](https://gitee.com/ejlchina-zhxu/okhttps)
|
||||
|
||||
[**[ 小诺快速开发平台 ]** 基于SpringBoot2 + AntDesignVue全新快速开发平台,同时拥有三个版本](https://xiaonuo.vip/index#pricing)
|
||||
|
||||
## 交流群
|
||||
QQ交流群:[1002350610 点击加入](https://jq.qq.com/?_wv=1027&k=45H977HM)
|
||||
|
||||
@@ -37,6 +37,7 @@
|
||||
- [token有效期详解](/fun/token-timeout)
|
||||
- [Session模型详解](/fun/session-model)
|
||||
- [TokenInfo参数详解](/fun/token-info)
|
||||
- [框架源码所有技术栈](/fun/tech-stack)
|
||||
|
||||
|
||||
|
||||
|
||||
15
sa-token-doc/doc/fun/tech-stack.md
Normal file
15
sa-token-doc/doc/fun/tech-stack.md
Normal file
@@ -0,0 +1,15 @@
|
||||
# sa-token 源码用到的所有技术栈
|
||||
|
||||
包括但不限于以下:
|
||||
|
||||
- Maven多模块项目
|
||||
- Servlet API、临时Cookie与永久Cookie、Request参数获取
|
||||
- SpringBoot2.0、Redis、Jackson、Hutool、jwt
|
||||
- SpringBoot自定义starter、Spring包扫码 + 依赖注入、AOP注解切面、yml配置映射、拦截器
|
||||
- Java8 接口与default实现、静态方法、枚举、定时器、异常类、泛型、反射、IO流、自定义注解、Lambda表达式、函数式编程
|
||||
- package-info注释、Serializable序列化接口、
|
||||
- java加密算法:MD5、SHA1、SHA256、AES、RSA
|
||||
- OAuth2.0、同域单点登录、集群与分布式、路由Ant匹配
|
||||
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<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、分布式会话、单点登录、前后台分离、模拟他人账号、临时身份切换、多账号体系、注解式鉴权、路由拦截式鉴权、花式token、自动续签、同端互斥登录、会话治理、Spring集成...,零配置开箱即用,覆盖所有应用场景,你所需要的功能,这里都有">
|
||||
<meta name="description" content="sa-token是一个java权限认证框架,功能全面,上手简单,登录验证、权限验证、Session会话、踢人下线、集成Redis、分布式会话、单点登录、前后台分离、记住我模式、模拟他人账号、临时身份切换、多账号体系、注解式鉴权、路由拦截式鉴权、花式token、自动续签、同端互斥登录、会话治理、密码加密、jwt集成、Spring集成...,有了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">
|
||||
|
||||
@@ -19,6 +19,7 @@
|
||||
|
||||
[[vue-next-admin] - 一套为开发者快速开发准备的基于 vue2.x 越看越精彩的后台管理系统一站式平台模板](https://gitee.com/lyt-top/vue-admin-wonderful)
|
||||
|
||||
[[小诺快速开发平台] - 基于SpringBoot2 + AntDesignVue全新快速开发平台,同时拥有三个版本](https://xiaonuo.vip/index#pricing)
|
||||
|
||||
<br>
|
||||
虚位以待...
|
||||
|
||||
@@ -47,7 +47,33 @@ Sa-token默认将会话数据保存在内存中,此模式读写速度最快,
|
||||
```
|
||||
|
||||
**2. 引入了依赖,我还需要为Redis配置连接信息吗?** <br>
|
||||
需要!只有项目初始化了正确的Redis实例,`sa-token`才可以使用Redis进行数据持久化,参考:[application-dev.yml](https://gitee.com/sz6/sa-plus/blob/master/sp-server/src/main/resources/application-dev.yml)
|
||||
需要!只有项目初始化了正确的Redis实例,`sa-token`才可以使用Redis进行数据持久化,参考以下`yml配置`:
|
||||
``` java
|
||||
# 端口
|
||||
spring:
|
||||
# redis配置
|
||||
redis:
|
||||
# Redis数据库索引(默认为0)
|
||||
database: 1
|
||||
# Redis服务器地址
|
||||
host: 127.0.0.1
|
||||
# Redis服务器连接端口
|
||||
port: 6379
|
||||
# Redis服务器连接密码(默认为空)
|
||||
# password:
|
||||
# 连接超时时间(毫秒)
|
||||
timeout: 1000ms
|
||||
lettuce:
|
||||
pool:
|
||||
# 连接池最大连接数
|
||||
max-active: 200
|
||||
# 连接池最大阻塞等待时间(使用负值表示没有限制)
|
||||
max-wait: -1ms
|
||||
# 连接池中的最大空闲连接
|
||||
max-idle: 10
|
||||
# 连接池中的最小空闲连接
|
||||
min-idle: 0
|
||||
```
|
||||
|
||||
|
||||
**3. 集成Redis后,是我额外手动保存数据,还是框架自动保存?** <br>
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
|
||||
|
||||
## 1、注册路由拦截器
|
||||
以`springboot2.0`为例, 新建配置类`MySaTokenConfig.java`
|
||||
以`SpringBoot2.0`为例, 新建配置类`MySaTokenConfig.java`
|
||||
``` java
|
||||
@Configuration
|
||||
public class MySaTokenConfig implements WebMvcConfigurer {
|
||||
@@ -22,49 +22,19 @@ public class MySaTokenConfig implements WebMvcConfigurer {
|
||||
}
|
||||
}
|
||||
```
|
||||
以上代码,我们注册了一个登录验证拦截器,并且排除了`/user/doLogin`接口用来开放登录 <br>
|
||||
以上代码,我们注册了一个登录验证拦截器,并且排除了`/user/doLogin`接口用来开放登录(除了`/user/doLogin`以外的所有接口都需要登录才能访问) <br>
|
||||
那么我们如何进行权限认证拦截呢,且往下看
|
||||
|
||||
|
||||
## 2、所有拦截器示例
|
||||
``` java
|
||||
@Configuration
|
||||
public class MySaTokenConfig implements WebMvcConfigurer {
|
||||
// 注册sa-token的所有拦截器
|
||||
@Override
|
||||
public void addInterceptors(InterceptorRegistry registry) {
|
||||
|
||||
// 注册一个登录验证拦截器
|
||||
registry.addInterceptor(SaRouteInterceptor.createLoginVal()).addPathPatterns("/**").excludePathPatterns("/user/doLogin");
|
||||
|
||||
// 注册一个角色认证拦截器
|
||||
registry.addInterceptor(SaRouteInterceptor.createRoleVal("super-admin")).addPathPatterns("/**");
|
||||
|
||||
// 注册一个权限认证拦截器
|
||||
registry.addInterceptor(SaRouteInterceptor.createPermissionVal("user:add", "user:deelete")).addPathPatterns("/UserController/**");
|
||||
|
||||
// 注册一个自定义认证拦截器 (可以写任意认证代码)
|
||||
registry.addInterceptor(new SaRouteInterceptor((request, response, handler)->{
|
||||
System.out.println("---------- 进入自定义认证 --------------- ");
|
||||
// 你可以在这里写任意认证代码, 例如: StpUtil.checkLogin();
|
||||
})).addPathPatterns("/**");
|
||||
|
||||
}
|
||||
}
|
||||
```
|
||||
(你不必像上面的示例一样注册所有拦截器,只要按需注册即可 )
|
||||
|
||||
|
||||
|
||||
## 3、让我们利用自定义拦截器做点快活的事情
|
||||
你可以根据路由划分模块,不同模块不同鉴权
|
||||
## 2、自定义权限验证规则
|
||||
你可以使用函数式编程自定义验证规则
|
||||
|
||||
``` java
|
||||
@Configuration
|
||||
public class MySaTokenConfig implements WebMvcConfigurer {
|
||||
// 注册sa-token的所有拦截器
|
||||
@Override
|
||||
public void addInterceptors(InterceptorRegistry registry) {
|
||||
// 注册路由拦截器,自定义验证规则
|
||||
registry.addInterceptor(new SaRouteInterceptor((request, response, handler)->{
|
||||
// 根据路由划分模块,不同模块不同鉴权
|
||||
SaRouterUtil.match("/user/**", () -> StpUtil.checkPermission("user"));
|
||||
@@ -78,27 +48,8 @@ public class MySaTokenConfig implements WebMvcConfigurer {
|
||||
}
|
||||
```
|
||||
|
||||
## 4、多账号模式下使用方式
|
||||
很简单,把StpUtil类换成新的权限验证类(比如多账号验证示例里面的StpUserUtil)即可其它调用方法不变
|
||||
|
||||
``` java
|
||||
@Configuration
|
||||
public class MySaTokenConfig implements WebMvcConfigurer {
|
||||
// 注册sa-token的所有拦截器
|
||||
@Override
|
||||
public void addInterceptors(InterceptorRegistry registry) {
|
||||
registry.addInterceptor(new SaRouteInterceptor((request, response, handler)->{
|
||||
// 根据路由划分模块,不同模块不同鉴权
|
||||
SaRouterUtil.match("/user/**", () -> StpUserUtil.checkPermission("user"));
|
||||
SaRouterUtil.match("/admin/**", () -> StpUtil.checkPermission("admin"));
|
||||
})).addPathPatterns("/**");
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
## 5、完整示例
|
||||
最终的代码,可能会类似于下面的样子:
|
||||
## 3、完整示例
|
||||
所有用法示例:
|
||||
|
||||
``` java
|
||||
@Configuration
|
||||
@@ -106,12 +57,15 @@ public class MySaTokenConfig implements WebMvcConfigurer {
|
||||
// 注册sa-token的拦截器
|
||||
@Override
|
||||
public void addInterceptors(InterceptorRegistry registry) {
|
||||
// 自定义验证拦截器
|
||||
// 注册路由拦截器,自定义验证规则
|
||||
registry.addInterceptor(new SaRouteInterceptor((request, response, handler) -> {
|
||||
|
||||
// 登录验证 -- 拦截所有路由,并排除/user/doLogin 用于开放登录
|
||||
SaRouterUtil.match("/**", "/user/doLogin", () -> StpUtil.checkLogin());
|
||||
|
||||
// 登录验证 -- 排除多个路径
|
||||
SaRouterUtil.match(Arrays.asList("/**"), Arrays.asList("/user/doLogin", "/user/reg"), () -> StpUtil.checkLogin());
|
||||
|
||||
// 角色认证 -- 拦截以 admin 开头的路由,必须具备[admin]角色或者[super-admin]角色才可以通过认证
|
||||
SaRouterUtil.match("/admin/**", () -> StpUtil.checkRoleOr("admin", "super-admin"));
|
||||
|
||||
@@ -126,6 +80,16 @@ public class MySaTokenConfig implements WebMvcConfigurer {
|
||||
// 匹配 restful 风格路由
|
||||
SaRouterUtil.match("/article/get/{id}", () -> StpUtil.checkPermission("article"));
|
||||
|
||||
// 检查请求方式
|
||||
SaRouterUtil.match("/notice/**", () -> {
|
||||
if(request.getMethod().equals(HttpMethod.GET.toString())) {
|
||||
StpUtil.checkPermission("notice");
|
||||
}
|
||||
});
|
||||
|
||||
// 在多账号模式下,可以使用任意StpUtil进行校验
|
||||
SaRouterUtil.match("/user/**", () -> StpUserUtil.checkLogin());
|
||||
|
||||
})).addPathPatterns("/**");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<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、分布式会话、单点登录、前后台分离、模拟他人账号、临时身份切换、多账号体系、注解式鉴权、路由拦截式鉴权、花式token、自动续签、同端互斥登录、会话治理、Spring集成...,零配置开箱即用,覆盖所有应用场景,你所需要的功能,这里都有">
|
||||
<meta name="description" content="sa-token是一个java权限认证框架,功能全面,上手简单,登录验证、权限验证、Session会话、踢人下线、集成Redis、分布式会话、单点登录、前后台分离、记住我模式、模拟他人账号、临时身份切换、多账号体系、注解式鉴权、路由拦截式鉴权、花式token、自动续签、同端互斥登录、会话治理、密码加密、jwt集成、Spring集成...,有了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">
|
||||
@@ -44,7 +44,7 @@
|
||||
<h1>sa-token<small>v1.14.0</small></h1>
|
||||
<div class="sub-title">这可能是史上功能最全的java权限认证框架!</div>
|
||||
<!-- <p>0配置开箱即用,低学习成本</p> -->
|
||||
<p>登录验证、权限验证、Session会话、踢人下线、集成Redis、分布式会话、单点登录、前后台分离、模拟他人账号、临时身份切换、多账号体系、注解式鉴权、路由拦截式鉴权、花式token、自动续签、同端互斥登录、会话治理、Spring集成...</p>
|
||||
<p>登录验证、权限验证、Session会话、踢人下线、集成Redis、分布式会话、单点登录、前后台分离、记住我模式、模拟他人账号、临时身份切换、多账号体系、注解式鉴权、路由拦截式鉴权、花式token、自动续签、同端互斥登录、会话治理、密码加密、jwt集成、Spring集成...</p>
|
||||
<!-- <p>零配置开箱即用,覆盖所有应用场景,你所需要的功能,这里都有</p> -->
|
||||
<p>有了sa-token,你所有的权限认证问题,都不再是问题!</p>
|
||||
<div class="btn-box">
|
||||
|
||||
@@ -34,7 +34,7 @@ public class SpringMVCUtil {
|
||||
public static HttpServletResponse getResponse() {
|
||||
ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
|
||||
if(servletRequestAttributes == null) {
|
||||
throw new SaTokenException("非Web上下文无法获取Request");
|
||||
throw new SaTokenException("非Web上下文无法获取Response");
|
||||
}
|
||||
return servletRequestAttributes.getResponse();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user