Skip to content

Latest commit

 

History

History
50 lines (30 loc) · 1.93 KB

认证鉴权流程.md

File metadata and controls

50 lines (30 loc) · 1.93 KB

认证鉴权流程

  1. 用户登录

    1. 成功
      1. 响应用户凭证(token、uuid、...)
      2. 响应用户菜单按钮权限(给前端用来判断菜单、按钮是否隐藏)
      3. 缓存用户凭证、用户信息(名字、权限集合、所属部门...)到 redis
  2. 访问资源

    1. 用户携带凭证访问后台系统接口
      1. 凭证可以放在 请求头、表单、cookie...
  3. 认证鉴权过滤

    1. 请求到达后台,被拦截器拦截(拦截所有请求)

      1. 从 request 获取请求 uri、请求 method

      2. 判断该 uri 是否被忽略认证鉴权(不需要登录、也不需要权限的路径,这些路径开发自己配,可以放在 常量类、数据库、配置文件...)

        1. 忽略,则过滤器直接放行,让请求到达目标接口

        2. 不忽略(即需要认证鉴权)

          1. 获取用户凭证,解密得到用户id,判断是否存在redis中,如果要做登录互斥,这里去 redis 中匹配登录时存的凭证,匹配失败即说明当前登录态失效,即账户在其他地方登录

            1. 取不到凭证、凭证解析失败、解析出的id在redis没有相关缓存信息,都是异常情况,响应客户 请登录后访问
          2. 是否仅需要登录(配置原理同上)

            1. 是 -> 到第4步
            2. 否 -> 到第3步
          3. 需要鉴权

            1. 从 redis 中获取用户权限集合,循环与当前 uri、method 匹配
              1. 匹配成功 -> 拥有权限,到第4步
              2. 匹配失败 -> 响应没有权限
          4. try finally 包围

            1. try 中
              1. 取出redis中的用户信息,放入 ThreadLocal,方便业务代码获取当前用户信息
              2. 放行请求 doFilter
            2. finally 中
              1. 清空当前 ThreadLocal