1.登录流程

controller

jeecg 微服务框架怎么获取当前用户的角色 jeecg单点登录_有效时间


先验证验证码

然后验证用户是否有效

jeecg 微服务框架怎么获取当前用户的角色 jeecg单点登录_获取用户信息_02


然后验证用户名和密码,通过的话会生成token

jeecg 微服务框架怎么获取当前用户的角色 jeecg单点登录_java_03


生成token

jeecg 微服务框架怎么获取当前用户的角色 jeecg单点登录_java_04


生成token之后存到返回结果中返回给前端 key为”token”,然后设置redis缓存过期时间,这个时间是token过期时间的2倍,用作续期token使用。具体方法在ShiroRealm这个类中。

JWTToken刷新生命周期 (实现: 用户在线操作不掉线功能)

  • 1、登录成功后将用户的JWT生成的Token作为k、v存储到cache缓存里面(这时候k、v值一样),缓存有效期设置为Jwt有效时间的2倍
  • 2、当该用户再次请求时,通过JWTFilter层层校验之后会进入到doGetAuthenticationInfo进行身份验证
  • 3、当该用户这次请求jwt生成的token值已经超时,但该token对应cache中的k还是存在,则表示该用户一直在操作只是JWT的token失效了,程序会给token对应的k映射的v值重新生成JWTToken并覆盖v值,该缓存生命周期重新计算
  • 4、当该用户这次请求jwt在生成的token值已经超时,并在cache中不存在对应的k,则表示该用户账户空闲超时,返回用户信息已失效,请重新登录。
  • 注意: 前端请求Header中设置Authorization保持不变,校验有效性以缓存中的token为准。
  • 用户过期时间 = Jwt有效时间 * 2。
  • Jwtutil的sign方法就是根据用户名生成token

2.token续期流程

请求进来会进行登录认证

jeecg 微服务框架怎么获取当前用户的角色 jeecg单点登录_获取用户信息_05


从token中获取用户信息,如果获取到了,且用户状态正常,就判断token是否过期了。

jeecg 微服务框架怎么获取当前用户的角色 jeecg单点登录_缓存_06


如果过期了就续期。

jeecg 微服务框架怎么获取当前用户的角色 jeecg单点登录_java_07

  • 过期的话重新生成token,重新设置过期时间,这时前端传的token也不需要变,只改redis缓存内容即可,因为是根据token获取用户信息来验证,登录的用户没有变的话,从token中获取的信息也是相同的,即使token的部分内容不同。这样过期的时候 就又有了一个小时的有效时间 redis是两个小时。

3.shiro权限认证

jeecg 微服务框架怎么获取当前用户的角色 jeecg单点登录_获取用户信息_08

1.ShiroConfig类

jeecg 微服务框架怎么获取当前用户的角色 jeecg单点登录_有效时间_09

1.shiroFilter方法

jeecg 微服务框架怎么获取当前用户的角色 jeecg单点登录_java_10


jeecg 微服务框架怎么获取当前用户的角色 jeecg单点登录_获取用户信息_11

2.securityManager

jeecg 微服务框架怎么获取当前用户的角色 jeecg单点登录_java_12

3.缓存相关的

jeecg 微服务框架怎么获取当前用户的角色 jeecg单点登录_缓存_13


jeecg 微服务框架怎么获取当前用户的角色 jeecg单点登录_有效时间_14

2.ShiroRealm类

具体执行拦截的类

jeecg 微服务框架怎么获取当前用户的角色 jeecg单点登录_获取用户信息_15

1.support

jeecg 微服务框架怎么获取当前用户的角色 jeecg单点登录_java_16


应该是重新定义的token,需要重写此方法吧。(盲猜)

2.doGetAuthenticationInfo

jeecg 微服务框架怎么获取当前用户的角色 jeecg单点登录_缓存_17

3.checkUserTokenIsEffect

jeecg 微服务框架怎么获取当前用户的角色 jeecg单点登录_缓存_18

4.jwtTokenRefresh

jeecg 微服务框架怎么获取当前用户的角色 jeecg单点登录_获取用户信息_19

5.doGetAuthorizationInfo

jeecg 微服务框架怎么获取当前用户的角色 jeecg单点登录_获取用户信息_20

3.JwtToken类

实现了shiro的AuthenticationToken接口。

jeecg 微服务框架怎么获取当前用户的角色 jeecg单点登录_java_21

4.JwtFilter类

拦截的源头,请求进来会先到这里,然后交给ShiroRealm处理

jeecg 微服务框架怎么获取当前用户的角色 jeecg单点登录_缓存_22


jeecg 微服务框架怎么获取当前用户的角色 jeecg单点登录_缓存_23

jeecg 微服务框架怎么获取当前用户的角色 jeecg单点登录_java_24