权限与会话校验机制说明
一、登录流程
- 用户提交登录请求
- 前端传递用户名、加密后的密码、时间戳等参数。
- 服务端校验
- 检查参数完整性。
- 查询用户信息,校验用户是否存在。
- 校验密码(结合盐值和时间戳加密比对)。
- 生成Token与会话
- 登录成功后,调用 Sa-Token 的
StpUtil.login(userName)生成 Token,并在服务端创建 Session(会话数据)。 - Token 返回给前端,后续请求需携带该 Token。
- 登录成功后,调用 Sa-Token 的
二、权限校验流程
- 登录校验(会话校验)
- 由
LoginInterceptor拦截器实现。 - 通过
StpUtil.isLogin()判断用户是否已登录(即 Session 是否有效)。 - 未登录则抛出异常,阻止后续操作。
- 由
- 权限校验
- 由
AuthInterceptor拦截器实现。 - 获取请求头中的模块名(TableName)、当前用户、角色等信息。
- 查询用户是否拥有访问该模块的权限。
- 无权限则抛出异常。
- 由
三、会话机制
- Session:服务端保存的用户会话数据,记录登录状态、用户信息等。
- Token:客户端持有的访问凭证,每次请求需携带。
- 会话存储:可配置为内存、Redis等,支持分布式部署。
- 会话失效:Session 超时、被清理、被踢下线等,都会导致用户需重新登录。
四、Token 与 Session 的关系
- Token 是客户端的“钥匙”,Session 是服务端的“门锁”。
- 每次请求,服务端用 Token 查找 Session,判断用户是否登录。
- 如果 Session 被删除或失效,即使 Token 还在,用户也会被判定为未登录,必须重新登录。
五、常见问题解答
1. 为什么有两个拦截器?
LoginInterceptor负责登录(会话)校验,防止未登录用户访问系统。AuthInterceptor负责权限校验,防止用户越权操作。- 分层设计,职责单一,安全性高。
2. Token 有效但 Session 被删掉还能访问吗?
- 不能。Session 是服务端判断登录状态的唯一依据,Session 失效后,用户必须重新登录。
3. 使用的权限中间件是什么?
- 本系统使用 Sa-Token 作为权限与会话管理框架。
4. 支持哪些权限管理功能?
- 登录认证、权限认证、会话管理、踢人下线、分布式会话等。