Token:在计算机身份认证中是令牌(临时)的意思,在词法分析中是标记的意思。一般作为邀请、登录系统使用。
Token首先它是一个用作验证身份的令牌,其次它的存在是有时效的,到期失效,并且token中是可以存储一些信息的,可以进行一些用户信息的传递以及验证。
以上是我理解的token,以下是我在项目中的具体使用。
首先说背景:这个项目里有微信小程序端,WebService接口端,vue的后台管理端。
如何使用?
在这个项目中,我是把token放在Request Headers里的,这里我只提供我自己,网上有很多具体的例子。
微信端:
header: {
'Content-Type': 'application/json',
"Authentication-Token": that.globalData.userInfo.token
},
web端:
if(store.state.user.token){
config.headers.common['Authentication-Token']=store.state.user.token
}
服务器端:
response.setHeader("Access-Control-Allow-Origin", "*");
response.setHeader("Access-Control-Allow-Headers", "Content-Type,Authentication-Token");
response.setHeader("Access-Control-Allow-Methods", "PUT,POST,GET,DELETE,OPTIONS");
String token = request.getHeader("Authentication-Token");
过期如何处理?
微信端:当身份过期了,重新调用login接口获取token并再次发送上次的网络请求,保证用户体验。(可封装网络请求,统一处理)
requestObj.resolve = resolve;
promiseQueue.push(requestObj); //请求失败了,把该请求放到promise队列,等待更新token后重新调用。
if (!that.globalData.needBeginLogin) { //如果不需要重新登录
return;
}
//防止重复调用login。
that.globalData.needBeginLogin = false;
that.login(() => { //获取完token以后执行回调
//重新登陆以后调用一次队列中的promise;并设置队列为可循环状态。
let promiseQueueItem = promiseQueue.shift();
if (promiseQueueItem) {
that.globalData.exeQueue = true;
that.promiseRequest(promiseQueueItem);
that.globalData.promiseQueue = promiseQueue;
}
}, true)
web端:当身份过期了,直接返回到登陆页面。
logout(state.token).then(() => {
commit('setToken', '')
commit('setAccess', [])
resolve()
}).catch(err => {
reject(err)
})
服务器端:在filter里直接判断,如果过期,直接打回去。
String token = request.getHeader("Authentication-Token");
if (!JwtUtil.verify(token)) {
response.setStatus(601);
return false;
}
以上只是我作为一个萌新的个人使用的记录,都是一些代码片段,仅提供一种思路。