优化文档结构样式

This commit is contained in:
click33
2024-07-29 00:43:55 +08:00
parent 1224397981
commit ae67ad6a02
38 changed files with 551 additions and 156 deletions

View File

@@ -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>
> 前端的鉴权只是一个辅助功能,对于专业人员这些限制都是可以轻松绕过的,为保证服务器安全:**无论前端是否进行了权限校验,后端接口都需要对会话请求再次进行权限校验!**

View File

@@ -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)` 一句代码就完成登录认证。
除了登录方法,我们还需要:

View File

@@ -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、关闭注解校验

View File

@@ -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)