JWT(无状态token)过期自动刷新
步骤:
- 通过过滤器拦截用户请求接口、判断header是否携带有token、没有携带的话返回提示直接写入response 响应前端。
- 携带了token的话我们自定义shiro 用户认证的 UsernamePasswordToken 把前端携带过来的业务访问token(accessToken) 整合成一个 UsernamePasswordToken。
- 主体提交认证(getSubject(servletRequest,servletResponse).login(customUsernamePasswordToken)),主体提交用户认证后、会流转到用户认证器(ModularRealmAuthenticator),用户认证器呢会通过自定义域中的doGetAuthenticationInfo获取用户的info认证凭证,然后把Token认证信息交给doCredentialsMatch进行验证。
- 要对用户认证抛出的异常进行try catch 封装处理用户认证抛出的异常,写入response响应应前端
首先ajax请求后端接口才能被监控的到,当监控到token授权异常返回4010001(自定义code),跳转到登录页面重新登录;监控到token过期返回4010002,当拿到这个code后就会调用刷新token接口,当刷新token结束后,将新的token回写到本地(设置停顿1s),重新调用之前调用的接口,就要把上一次调用的参数和方法记录标记起来,让用户不知不觉中刷新token。