Token 认证流程概述

当用户携带 token 请求资源服务器的资源时,Spring Security 拦截 token,进行 token 和 userdetails 匹配过程,把无状态的 token 转化成具体用户。

1. Filter 拦截请求进行鉴权

BearerTokenAuthenticationFilter 功能说明

  • 拦截所有资源服务器的请求
  • 解析 header 或者参数中的 access_token 字段
  • 根据 access_token 构造出来 BearerTokenAuthenticationToken 认证对象

2. 匹配自省鉴权处理器

3. 调用自省拦截器实现处理

自省拦截器处理流程

  • PigRedisOAuth2AuthorizationService 通过 token value 查询认证中心下发令牌时存储的用户认证信息
  • 根据用户认证信息再次调用 PigUserDetailsService 查询数据库中的最新数据
  • 避免 redis 存储旧数据,实现权限实时更新

4. 接口进行权限判断

权限判断机制

如下代码上进行 hasPermission 鉴权操作会调用 PermissionService.hasPermission 进行权限判断

@GetMapping("/export")
@PreAuthorize("@pms.hasPermission('sys_user_import_export')")
public List<UserExcelVO> export(UserDTO userDTO) {
}

5. PIG 数据库权限模型

权限模型说明

  • 用户 1 : 角色 N (一个用户可以拥有多个角色)
  • 角色 1 : 菜单 (权限) N (一个角色可以拥有多个权限)

♥️ 获取支持

遇到问题?

如果您在使用过程中遇到任何问题、有功能建议或需求,请点击此卡片前往 Gitee 仓库提交 Issue。