mirror of
https://gitee.com/dromara/sa-token.git
synced 2026-05-14 21:02:09 +08:00
优化文档结构样式
This commit is contained in:
@@ -71,7 +71,7 @@ public class StpInterfaceImpl implements StpInterface {
|
||||
|
||||
可参考代码:[码云:StpInterfaceImpl.java](https://gitee.com/dromara/sa-token/blob/master/sa-token-demo/sa-token-demo-case/src/main/java/com/pj/satoken/StpInterfaceImpl.java)
|
||||
|
||||
> 有同学会产生疑问:我实现了此接口,但是程序启动时好像并没有执行,是不是我写错了?
|
||||
> [!TIP| label:有同学会产生疑问:我实现了此接口,但是程序启动时好像并没有执行,是不是我写错了?]
|
||||
> 答:不执行是正常现象,程序启动时不会执行这个接口的方法,在每次调用鉴权代码时,才会执行到此。
|
||||
|
||||
|
||||
@@ -162,7 +162,8 @@ StpUtil.hasPermission("index.css"); // false
|
||||
StpUtil.hasPermission("index.html"); // false
|
||||
```
|
||||
|
||||
!> 上帝权限:当一个账号拥有 `"*"` 权限时,他可以验证通过任何权限码 (角色认证同理)
|
||||
> [!WARNING| label:上帝权限]
|
||||
> 当一个账号拥有 `"*"` 权限时,他可以验证通过任何权限码 (角色认证同理)
|
||||
|
||||
|
||||
### 7、如何把权限精确到按钮级?
|
||||
@@ -176,19 +177,18 @@ StpUtil.hasPermission("index.html"); // false
|
||||
2. 前端将权限码集合保存在`localStorage`或其它全局状态管理对象中。
|
||||
3. 在需要权限控制的按钮上,使用 js 进行逻辑判断,例如在`Vue`框架中我们可以使用如下写法:
|
||||
``` js
|
||||
// `arr`是当前用户拥有的权限码数组
|
||||
// `user.delete`是显示按钮需要拥有的权限码
|
||||
// `删除按钮`是用户拥有权限码才可以看到的内容。
|
||||
<button v-if="arr.indexOf('user.delete') > -1">删除按钮</button>
|
||||
```
|
||||
其中:`arr`是当前用户拥有的权限码数组,`user.delete`是显示按钮需要拥有的权限码,`删除按钮`是用户拥有权限码才可以看到的内容。
|
||||
|
||||
以上写法只为提供一个参考示例,不同框架有不同写法,大家可根据项目技术栈灵活封装进行调用。
|
||||
|
||||
|
||||
注意:以上写法只为提供一个参考示例,不同框架有不同写法,大家可根据项目技术栈灵活封装进行调用。
|
||||
|
||||
|
||||
### 8、前端有了鉴权后端还需要鉴权吗?
|
||||
**需要!**
|
||||
|
||||
前端的鉴权只是一个辅助功能,对于专业人员这些限制都是可以轻松绕过的,
|
||||
为保证服务器安全,**无论前端是否进行了权限校验,后端接口都需要对会话请求再次进行权限校验!**
|
||||
> [!ATTENTION| label:前端有了鉴权后端还需要鉴权吗?]
|
||||
> **需要!** <br>
|
||||
> 前端的鉴权只是一个辅助功能,对于专业人员这些限制都是可以轻松绕过的,为保证服务器安全:**无论前端是否进行了权限校验,后端接口都需要对会话请求再次进行权限校验!**
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -32,13 +32,13 @@ StpUtil.login(Object id);
|
||||
```
|
||||
|
||||
只此一句代码,便可以使会话登录成功,实际上,Sa-Token 在背后做了大量的工作,包括但不限于:
|
||||
|
||||
|
||||
1. 检查此账号是否之前已有登录;
|
||||
2. 为账号生成 `Token` 凭证与 `Session` 会话;
|
||||
3. 记录 Token 活跃时间;
|
||||
4. 通知全局侦听器,xx 账号登录成功;
|
||||
5. 将 `Token` 注入到请求上下文;
|
||||
6. 等等其它工作……
|
||||
6. 等等其它工作……
|
||||
|
||||
你暂时不需要完整了解整个登录过程,你只需要记住关键一点:`Sa-Token 为这个账号创建了一个Token凭证,且通过 Cookie 上下文返回给了前端`。
|
||||
|
||||
@@ -61,12 +61,16 @@ public SaResult doLogin(String name, String pwd) {
|
||||
如果你对以上代码阅读没有压力,你可能会注意到略显奇怪的一点:此处仅仅做了会话登录,但并没有主动向前端返回 token 信息。
|
||||
是因为不需要吗?严格来讲是需要的,只不过 `StpUtil.login(id)` 方法利用了 Cookie 自动注入的特性,省略了你手写返回 token 的代码。
|
||||
|
||||
如果你对 Cookie 功能还不太了解,也不用担心,我们会在之后的 [ 前后端分离 ] 章节中详细的阐述 Cookie 功能,现在你只需要了解最基本的两点:
|
||||
|
||||
- Cookie 可以从后端控制往浏览器中写入 token 值。
|
||||
- Cookie 会在前端每次发起请求时自动提交 token 值。
|
||||
> [!TIP| label:Cookie 是什么?]
|
||||
> 如果你对 Cookie 功能还不太了解,也不用担心,我们会在之后的 [ 前后端分离 ] 章节中详细的阐述 Cookie 功能,现在你只需要了解最基本的两点:
|
||||
>
|
||||
> - Cookie 可以从后端控制往浏览器中写入 token 值。
|
||||
> - Cookie 会在前端每次发起请求时自动提交 token 值。
|
||||
>
|
||||
> 因此,在 Cookie 功能的加持下,我们可以仅靠 `StpUtil.login(id)` 一句代码就完成登录认证。
|
||||
|
||||
|
||||
因此,在 Cookie 功能的加持下,我们可以仅靠 `StpUtil.login(id)` 一句代码就完成登录认证。
|
||||
|
||||
除了登录方法,我们还需要:
|
||||
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
---
|
||||
|
||||
假设我们有如下需求:
|
||||
> [!INFO| label:需求场景]
|
||||
> 项目中所有接口均需要登录认证,只有 “登录接口” 本身对外开放
|
||||
|
||||
我们怎么实现呢?给每个接口加上鉴权注解?手写全局拦截器?似乎都不是非常方便。
|
||||
@@ -28,7 +29,8 @@ public class SaTokenConfigure implements WebMvcConfigurer {
|
||||
```
|
||||
以上代码,我们注册了一个基于 `StpUtil.checkLogin()` 的登录校验拦截器,并且排除了`/user/doLogin`接口用来开放登录(除了`/user/doLogin`以外的所有接口都需要登录才能访问)。
|
||||
|
||||
!> `SaInterceptor` 是新版本提供的拦截器,点此 [查看旧版本代码迁移示例](https://blog.csdn.net/shengzhang_/article/details/126458949)。
|
||||
> [!WARNING| label:版本升级]
|
||||
> `SaInterceptor` 是新版本提供的拦截器,点此 [查看旧版本代码迁移示例](https://blog.csdn.net/shengzhang_/article/details/126458949)。
|
||||
|
||||
### 2、校验函数详解
|
||||
自定义认证规则:`new SaInterceptor(handle -> StpUtil.checkLogin())` 是最简单的写法,代表只进行登录校验功能。
|
||||
@@ -215,7 +217,10 @@ public SaResult getList() {
|
||||
|
||||
请求将会跳过拦截器的校验,直接进入 Controller 的方法中。
|
||||
|
||||
**注意点:此注解的忽略效果只针对 SaInterceptor拦截器 和 AOP注解鉴权 生效,对自定义拦截器与过滤器不生效。**
|
||||
> [!WARNING| label:注意点]
|
||||
> 注解 `@SaIgnore` 的忽略效果只针对 SaInterceptor拦截器 和 AOP注解鉴权 生效,对自定义拦截器与过滤器不生效。
|
||||
|
||||
|
||||
|
||||
|
||||
### 7、关闭注解校验
|
||||
|
||||
@@ -20,6 +20,7 @@ SysUser user = (SysUser) StpUtil.getSession().get("user");
|
||||
- `Token-Session`: 指的是框架为每个 token 分配的 Session
|
||||
- `Custom-Session`: 指的是以一个 特定的值 作为SessionId,来分配的 Session
|
||||
|
||||
> [!TIP| style:callout]
|
||||
> 有关 Account-Session 与 Token-Session 的详细区别,可参考:[Session模型详解](/fun/session-model)
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user