您的位置:

java里token已过期怎么办,如果token过期了,交给谁处理

本文目录一览:

JWT生成token及过期处理方案

## 业务场景

在前后分离场景下,越来越多的项目使用token作为接口的安全机制,APP端或者WEB端(使用VUE、REACTJS等构建)使用token与后端接口交互,以达到安全的目的。本文结合stackoverflow以及本身项目实践,试图总结出一个通用的,可落地的方案。

## 基本思路

- 单个token

1. token(A)过期设置为15分钟

2. 前端发起请求,后端验证token(A)是否过期;如果过期,前端发起刷新token请求,后端设置已再次授权标记为true,请求成功

3. 前端发起请求,后端验证再次授权标记,如果已经再次授权,则拒绝刷新token的请求,请求成功

4. 如果前端每隔72小时,必须重新登录,后端检查用户最后一次登录日期,如超过72小时,则拒绝刷新token的请求,请求失败

- 授权token加上刷新token

用户仅登录一次,用户改变密码,则废除token,重新登录

## 1.0实现

1.登录成功,返回access\_token和refresh\_token,客户端缓存此两种token; 

2.使用access_token请求接口资源,成功则调用成功;如果token超时,客户端 

携带refresh\_token调用中间件接口获取新的access\_token; 

3.中间件接受刷新token的请求后,检查refresh_token是否过期。 

如过期,拒绝刷新,客户端收到该状态后,跳转到登录页; 

如未过期,生成新的access\_token和refresh\_token并返回给客户端(如有可能,让旧的refresh\_token失效),客户端携带新的access\_token重新调用上面的资源接口。 

4.客户端退出登录或修改密码后,调用中间件注销旧的token(使access\_token和refresh\_token失效),同时清空客户端的access\_token和refresh\_toke。

后端表 

id user\_id client\_id client\_secret refresh\_token expire\_in create\_date del_flag

## 2.0实现

场景: access\_token访问资源 refresh\_token授权访问 设置固定时间X必须重新登录

1.登录成功,后台jwt生成access\_token(jwt有效期30分钟)和refresh\_token(jwt有效期15天),并缓存到redis(hash-key为token,sub-key为手机号,value为设备唯一编号(根据手机号码,可以人工废除全部token,也可以根据sub-key,废除部分设备的token。),设置过期时间为1个月,保证最终所有token都能删除),返回后,客户端缓存此两种token; 

2.使用access\_token请求接口资源,校验成功且redis中存在该access\_token(未废除)则调用成功;如果token超时,中间件删除access\_token(废除);客户端再次携带refresh\_token调用中间件接口获取新的access_token; 

3.中间件接受刷新token的请求后,检查refresh_token是否过期。 

如过期,拒绝刷新,删除refresh_token(废除); 客户端收到该状态后,跳转到登录页; 

如未过期,检查缓存中是否有refresh\_token(是否被废除),如果有,则生成新的access\_token并返回给客户端,客户端接着携带新的access_token重新调用上面的资源接口。 

4.客户端退出登录或修改密码后,调用中间件注销旧的token(中间件删除access\_token和refresh\_token(废除)),同时清空客户端侧的access\_token和refresh\_toke。 

5.如手机丢失,可以根据手机号人工废除指定用户设备关联的token。 

6.以上3刷新access_token可以增加根据登录时间判断最长X时间必须重新登录,此时则拒绝刷新token。(拒绝的场景:失效,长时间未登录,频繁刷新)

2.0 变动 

1.登录 

2.登录拦截器 

3.增加刷新access_token接口 

4.退出登录 

5.修改密码

## 3.0实现

场景:自动续期 长时间未使用需重新登录

1.登录成功,后台jwt生成access\_token(jwt有效期30分钟),并缓存到redis(hash-key为access\_token,sub-key为手机号,value为设备唯一编号(根据手机号码,可以人工废除全部token),设置access_token过期时间为7天,保证最终所有token都能删除),返回后,客户端缓存此token;

2.使用access\_token请求接口资源,校验成功且redis中存在该access\_token(未废除)则调用成功;如果token超时,中间件删除access\_token(废除),同时生成新的access\_token并返回。客户端收到新的access_token, 

再次请求接口资源。

3.客户端退出登录或修改密码后,调用中间件注销旧的token(中间件删除access\_token(废除)),同时清空客户端侧的access\_token。

4.以上2 可以增加根据登录时间判断最长X时间必须重新登录,此时则拒绝刷新token。(拒绝的场景:长时间未登录,频繁刷新)

5.如手机丢失,可以根据手机号人工废除指定用户设备关联的token。

3.0 变动

1.登录 

2.登录拦截器 

3.退出登录 

4.修改密码

1.3 场景:token过期重新登录 长时间未使用需重新登录

1.登录成功,后台jwt生成access\_token(jwt有效期7天),并缓存到redis,key为 "user\_id:access\_token",value为access\_token(根据用户id,可以人工废除指定用户全部token),设置缓存过期时间为7天,保证最终所有token都能删除,请求返回后,客户端缓存此access_token;

2.使用access\_token请求接口资源,校验成功且redis中存在该access\_token(未废除)则调用成功;如果token超时,中间件删除access\_token(废除),同时生成新的access\_token并返回。客户端收到新的access_token, 

再次请求接口资源。

3.客户端退出登录或修改密码后,调用中间件注销旧的token(中间件删除access\_token(废除)),同时清空客户端侧的access\_token。

4.以上2 可以增加根据登录时间判断最长X时间必须重新登录,此时则拒绝刷新token。(拒绝的场景:长时间未登录,频繁刷新)

5.如手机丢失,可以根据手机号人工废除指定用户设备关联的token。

1.3 变动

1.登录 

2.登录拦截器 

3.退出登录 

4.修改密码

# 解决方案

2.0 场景: access\_token访问资源 refresh\_token授权访问 设置固定时间X必须重新登录

1.登录成功,后台jwt生成access\_token(jwt有效期30分钟)和refresh\_token(jwt有效期15天),并缓

存到redis(hash-key为token,sub-key为手机号,value为设备唯一编号(根据手机号码,可以人工废除全

部token,也可以根据sub-key,废除部分设备的token。),设置过期时间为1个月,保证最终所有token都

能删除),返回后,客户端缓存此两种token;

2.使用access\_token请求接口资源,校验成功且redis中存在该access\_token(未废除)则调用成功;如果

token超时,中间件删除access\_token(废除);客户端再次携带refresh\_token调用中间件接口获取新的

access_token;

3.中间件接受刷新token的请求后,检查refresh_token是否过期。

如过期,拒绝刷新,删除refresh_token(废除); 客户端收到该状态后,跳转到登录页;

如未过期,检查缓存中是否有refresh\_token(是否被废除),如果有,则生成新的access\_token并返回给

客户端,客户端接着携带新的access_token重新调用上面的资源接口。

4.客户端退出登录或修改密码后,调用中间件注销旧的token(中间件删除access\_token和refresh\_token(

废除)),同时清空客户端侧的access\_token和refresh\_toke。

5.如手机丢失,可以根据手机号人工废除指定用户设备关联的token。

6.以上3刷新access_token可以增加根据登录时间判断最长X时间必须重新登录,此时则拒绝刷新token。(

拒绝的场景:失效,长时间未登录,频繁刷新)

2.0 变动

1.登录

2.登录拦截器

3.增加刷新access_token接口

4.退出登录

5.修改密码

3.0 场景:自动续期 长时间未使用需重新登录

1.登录成功,后台jwt生成access_token(jwt有效期30分钟),并缓存到redis(hash-key为

access_token,sub-key为手机号,value为设备唯一编号(根据手机号码,可以人工废除全部token,也可以

根据sub-key,废除部分设备的token。),设置access_token过期时间为1个月,保证最终所有token都能删

除),返回后,客户端缓存此token;

2.使用access\_token请求接口资源,校验成功且redis中存在该access\_token(未废除)则调用成功;如果

token超时,中间件删除access\_token(废除),同时生成新的access\_token并返回。客户端收到新的

access_token,

再次请求接口资源。

3.客户端退出登录或修改密码后,调用中间件注销旧的token(中间件删除access_token(废除)),同时清

空客户端侧的access_token。

4.以上2 可以增加根据登录时间判断最长X时间必须重新登录,此时则拒绝刷新token。(拒绝的场景:长

时间未登录,频繁刷新)

5.如手机丢失,可以根据手机号人工废除指定用户设备关联的token。

3.0 变动

1.登录

2.登录拦截器

3.退出登录

4.修改密码

4.0 场景:token过期重新登录 长时间未使用需重新登录

1.登录成功,后台jwt生成access_token(jwt有效期7天),并缓存到redis,key为

"user\_id:access\_token" + 用户id,value为access_token(根据用户id,可以人工废除指定用户全部

token),设置缓存过期时间为7天,保证最终所有token都能删除,请求返回后,客户端缓存此

access_token;

2.使用access\_token请求接口资源,校验成功且redis中存在该access\_token(未废除)则调用成功;如果

token超时,中间件删除access\_token(废除),同时生成新的access\_token并返回。客户端收到新的

access_token,

再次请求接口资源。

3.客户端退出登录或修改密码后,调用中间件注销旧的token(中间件删除access_token(废除)),同时清

空客户端侧的access_token。

4.以上2 可以增加根据登录时间判断最长X时间必须重新登录,此时则拒绝刷新token。(拒绝的场景:长

时间未登录,频繁刷新)

5.如手机丢失,可以根据手机号人工废除指定用户设备关联的token。

4.0 变动

1.登录

2.登录拦截器

3.退出登录

4.修改密码

## 最终实现

### 后端

1. 在登录接口中 如果校验账号密码成功 则根据用户id和用户类型创建jwt token(有效期设置为-1,即永不过期),得到A

2. 更新登录日期(当前时间new Date()即可)(业务上可选),得到B

3. 在redis中缓存key为ACCESS_TOKEN:userId:A(加上A是为了防止用户多个客户端登录 造成token覆盖),value为B的毫秒数(转换成字符串类型),过期时间为7天(7 * 24 * 60 * 60)

4. 在登录结果中返回json格式为{"result":"success","token": A}

5. 用户在接口请求header中携带token进行登录,后端在所有接口前置拦截器进行拦截,作用是解析token 拿到userId和用户类型(用户调用业务接口只需要传token即可),

如果解析失败(抛出SignatureException),则返回json(code = 0 ,info= Token验证不通过, errorCode = '1001');

此外如果解析成功,验证redis中key为ACCESS_TOKEN:userId:A 是否存在 如果不存在 则返回json(code = 0 ,info= 会话过期请重新登录, errorCode = '1002');

如果缓存key存在,则自动续7天超时时间(value不变),实现频繁登录用户免登陆。

6. 把userId和用户类型放入request参数中 接口方法中可以直接拿到登录用户信息

7. 如果是修改密码或退出登录 则废除access_tokens(删除key)

### 前端(VUE)

1. 用户登录成功,则把username存入cookie中,key为loginUser;把token存入cookie中,key为accessToken

  把token存入Vuex全局状态中

2. 进入首页

token已过期是什么意思?

token已过期是证书已过期的意思。

token在互联网行业代表的是身份令牌。即登录之后系统分发的一个代表这个用户的一个证书,这个证书是有时效的,如果时效结束了就会出现这个token失效的情况,要解决这个问题,如果是手机端的话,退出登录在重新登录一次即可。

证书最大的作用就是证明,但是由于造假水平的提高,目前90%之上的证书都急需证明,需要一个技术平台来提高防伪能力,那就是“证书上网查询”一个公用的平台,同时也需要保护个人隐私。

扩展资料

数据处理

token其实说的更通俗点可以叫暗号,在一些数据传输之前,要先进行暗号的核对,不同的暗号被授权不同的数据操作。例如在USB1.1协议中定义了4类数据包:token包、data包、handshake包和special包。

主机和USB设备之间连续数据的交换可以分为三个阶段,第一个阶段由主机发送token包,不同的token包内容不一样(暗号不一样)可以告诉设备做不同的工作,第二个阶段发送data包,第三个阶段由设备返回一个handshake包。

token过期是什么意思?

银行token过期就是说明代表证书过期的意思。

需重新调用授权界面,重新获取code,然后刷新获取新的accesstoken、refreshtoken、expirein,再将这些替换掉关联表中的数据。

token是用户登陆银行系统之后,系统分发的代表这个用户身份的一个证书。这个证书是有时效的,如果时效结束就会出现token失效的提示,这时可以尝试退出重新登录。

token在互联网行业代表的是身份令牌。就是登陆之后系统分发的一个代表这个用户的一个证书,这个证书是有时效的,如果时效结束了就会出现这个token失效的情况,要解决这个问题,如果是手机端的话,退出登陆在重新登陆一次就好了。

Accesstoken的有效期是一个月,refreshtoken的有效期是两个月,所谓的长期有效是:用refreshtoken不断刷新得到新的,其它情况下,Accesstoken和refreshtoken,除非用户两个月没有访问过app,导致refreshtoken也失效了,这时候就需要用户重新登录了。

tokenid已经失效 什么意思?

tokenid已经失效是证书过了有效期的意思,需要重新授权。

token在互联网行业代表的是身份令百牌,是指登录系统分发的一个代表这个用户的一个证书,这个证书是有时效的,如果时效结束了就会出现这个token过期或者失效的情况。

tokenid表示为:用户登录到成功后,服务端分配给客户端的令牌号,同时下发度tokenid的过期时间。下次用户直接持有tokenid,在其过知期时间内均可跳过用户登录步骤,直接请求其他服务道操作。如果tokenid过期,则需重回新登录。

扩展资料

Token不具备无条件使用的功能和价值尺度功能,在逻辑上不具备货币的全部功能。Token ring 即令牌环网。

在网络技术里面,令牌是一种能够控制站点占有媒体的特殊帧,以区别数据帧及其他控制帧。

在数据处理方面,token其实说得更通俗点可以叫暗号,在一些数据传输之前,要先进行暗号的核对,不同的暗号被授权不同的数据操作。

例如在USB1.1协议中定义了4类数据包:token包、data包、handshake包和special包。可以分为三个阶段,第一个阶段由主机发送token包,不同的token包内容不一样(暗号不一样)可以告诉设备做不同的工作,第二个阶段发送data包,第三个阶段由设备返回一个handshake包。

参考资料来源:百度百科——Token——数据处理