mirror of
https://gitee.com/dromara/sa-token.git
synced 2026-02-27 16:50:24 +08:00
v1.27.1 新增jwt集成插件
This commit is contained in:
@@ -59,7 +59,7 @@
|
||||
|
||||
- **插件**
|
||||
- [AOP注解鉴权](/plugin/aop-at)
|
||||
- [临时Token验证](/plugin/temp-token)
|
||||
- [临时Token认证](/plugin/temp-token)
|
||||
- [Quick-Login快速登录插件](/plugin/quick-login)
|
||||
- [Alone独立Redis插件](/plugin/alone-redis)
|
||||
- [持久层扩展](/plugin/dao-extend)
|
||||
|
||||
@@ -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、前后台分离、分布式会话、微服务网关鉴权、单点登录、OAuth2.0、临时Token验证、记住我模式、模拟他人账号、临时身份切换、多账号体系、注解式鉴权、路由拦截式鉴权、花式token、自动续签、同端互斥登录、会话治理、密码加密、jwt集成、Spring集成、WebFlux集成...,有了sa-token,你所有的权限认证问题,都不再是问题">
|
||||
<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">
|
||||
|
||||
@@ -83,7 +83,7 @@ public class SaTokenConfigure {
|
||||
.addExclude("/favicon.ico")
|
||||
// 鉴权方法:每次访问进入
|
||||
.setAuth(obj -> {
|
||||
// 登录验证 -- 拦截所有路由,并排除/user/doLogin 用于开放登录
|
||||
// 登录校验 -- 拦截所有路由,并排除/user/doLogin 用于开放登录
|
||||
SaRouter.match("/**", "/user/doLogin", r -> StpUtil.checkLogin());
|
||||
|
||||
// 权限认证 -- 不同模块, 校验不同权限
|
||||
|
||||
@@ -12,7 +12,7 @@ SaManager.getStpInterface(); // 获取权限认证对象
|
||||
SaManager.getSaTokenAction(); // 获取框架行为对象
|
||||
SaManager.getSaTokenContext(); // 获取上下文处理对象
|
||||
SaManager.getSaTokenListener(); // 获取侦听器对象
|
||||
SaManager.getSaTemp(); // 获取临时令牌验证模块对象
|
||||
SaManager.getSaTemp(); // 获取临时令牌认证模块对象
|
||||
SaManager.getStpLogic("type"); // 获取指定账号类型的StpLogic对象
|
||||
```
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# 临时Token令牌验证
|
||||
# 临时Token令牌认证
|
||||
|
||||
---
|
||||
|
||||
@@ -37,7 +37,7 @@ http://xxx.com/apply?token=oEwQBnglXDoGraSJdGaLooPZnGrk
|
||||
|
||||
### 相关API
|
||||
|
||||
**[sa-token-temp临时验证模块]** 已内嵌到核心包,无需引入其它依赖即可使用
|
||||
**[sa-token-temp临时认证模块]** 已内嵌到核心包,无需引入其它依赖即可使用
|
||||
|
||||
``` java
|
||||
// 根据 value 创建一个 token
|
||||
@@ -55,7 +55,7 @@ SaTempUtil.deleteToken(token);
|
||||
|
||||
|
||||
### 集成jwt
|
||||
提到 [临时Token验证],你是不是想到一个专门干这件事的框架?对,就是JWT!
|
||||
提到 [临时Token认证],你是不是想到一个专门干这件事的框架?对,就是JWT!
|
||||
|
||||
**[sa-token-temp]** 模块允许以JWT作为逻辑内核完成工作,你只需要引入以下依赖,所有上层API保持不变
|
||||
|
||||
|
||||
@@ -198,7 +198,7 @@ public class SaSsoClientApplication {
|
||||
|
||||
至此,测试完毕!
|
||||
|
||||
可以看出,除了在`Client1`端我们需要手动登录一次之外,在`Client2端`和`Client3端`都是可以无需验证,直接登录成功的。
|
||||
可以看出,除了在`Client1`端我们需要手动登录一次之外,在`Client2端`和`Client3端`都是可以无需再次认证,直接登录成功的。
|
||||
|
||||
我们可以通过 F12控制台 Netword跟踪整个过程
|
||||
|
||||
|
||||
@@ -107,6 +107,14 @@ public Object myinfo() {
|
||||
|
||||
访问测试:[http://sa-sso-client1.com:9001/sso/myinfo](http://sa-sso-client1.com:9001/sso/myinfo)
|
||||
|
||||
#### 3.3、疑问
|
||||
|
||||
群里有小伙伴提问:`SaSsoUtil.getUserinfo` 提供的参数太少,只有一个 loginId,无法满足业务需求怎么办?
|
||||
|
||||
答:SaSsoUtil.getUserinfo只是为了避免你在项目中硬编码认证中心 url 而提供的简易封装,如果这个API无法满足你的业务需求,
|
||||
你完全可以在 Server 端自定义一些接口然后从 Client 端使用 http 工具调用即可。
|
||||
|
||||
|
||||
|
||||
|
||||
### 4、无刷单点注销
|
||||
|
||||
@@ -42,7 +42,7 @@ public class SaTokenConfigure {
|
||||
.setAuth(obj -> {
|
||||
System.out.println("---------- 进入Sa-Token全局认证 -----------");
|
||||
|
||||
// 登录验证 -- 拦截所有路由,并排除/user/doLogin 用于开放登录
|
||||
// 登录认证 -- 拦截所有路由,并排除/user/doLogin 用于开放登录
|
||||
SaRouter.match("/**", "/user/doLogin", () -> StpUtil.checkLogin());
|
||||
|
||||
// 更多拦截处理方式,请参考“路由拦截式鉴权”章节
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
有的时候,我们会在一个项目中设计两套账号体系,比如一个电商系统的 `user表` 和 `admin表`,
|
||||
在这种场景下,如果两套账号我们都使用 `StpUtil` 类的API进行登录鉴权,那么势必会发生逻辑冲突
|
||||
|
||||
在Sa-Token中,这个问题的模型叫做:多账号体系验证
|
||||
在Sa-Token中,这个问题的模型叫做:多账号体系认证
|
||||
|
||||
要解决这个问题,我们必须有一个合理的机制将这两套账号的授权给区分开,让它们互不干扰才行
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
|
||||
### 2、解决方案
|
||||
|
||||
前面几篇介绍的api调用,都是经过 StpUtil 类的各种静态方法进行授权验证,
|
||||
前面几篇介绍的api调用,都是经过 StpUtil 类的各种静态方法进行授权认证,
|
||||
而如果我们深入它的源码,[点此阅览](https://gitee.com/dromara/sa-token/blob/master/sa-token-core/src/main/java/cn/dev33/satoken/stp/StpUtil.java) <br/>
|
||||
就会发现,此类并没有任何代码逻辑,唯一做的事就是对成员变量`stpLogic`的各个API包装一下进行转发
|
||||
|
||||
@@ -33,8 +33,8 @@
|
||||
|
||||
### 3、操作示例
|
||||
|
||||
比如说,对于原生`StpUtil`类,我们只做`admin账号`权限验证,而对于`user账号`,我们则:
|
||||
1. 新建一个新的权限验证类,比如: `StpUserUtil.java`
|
||||
比如说,对于原生`StpUtil`类,我们只做`admin账号`权限认证,而对于`user账号`,我们则:
|
||||
1. 新建一个新的权限认证类,比如: `StpUserUtil.java`
|
||||
2. 将`StpUtil.java`类的全部代码复制粘贴到 `StpUserUtil.java`里
|
||||
3. 更改一下其 `LoginType`, 比如:
|
||||
|
||||
|
||||
@@ -112,7 +112,8 @@ StpUtil.checkRoleOr("super-admin", "shop-admin");
|
||||
|
||||
### 拦截全局异常
|
||||
有同学要问,鉴权失败,抛出异常,然后呢?要把异常显示给用户看吗?**当然不可以!** <br>
|
||||
你可以创建一个全局异常拦截器,统一返回给前端的格式,参考:[码云:GlobalException.java](https://gitee.com/dromara/sa-token/blob/master/sa-token-demo/sa-token-demo-springboot/src/main/java/com/pj/test/GlobalException.java)
|
||||
你可以创建一个全局异常拦截器,统一返回给前端的格式,参考:
|
||||
[码云:GlobalException.java](https://gitee.com/dromara/sa-token/blob/master/sa-token-demo/sa-token-demo-springboot/src/main/java/com/pj/current/GlobalException.java)
|
||||
|
||||
|
||||
### 权限通配符
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
---
|
||||
|
||||
假设我们有如下需求:
|
||||
> 项目中所有接口均需要登录验证,只有'登录接口'本身对外开放
|
||||
> 项目中所有接口均需要登录认证,只有'登录接口'本身对外开放
|
||||
|
||||
我们怎么实现呢?给每个接口加上鉴权注解?手写全局拦截器?似乎都不是非常方便。<br/>
|
||||
在这个需求中我们真正需要的是一种基于路由拦截的鉴权模式, 那么在Sa-Token怎么实现路由拦截鉴权呢?
|
||||
|
||||
Reference in New Issue
Block a user