我的做法是这样的:
在拦截器中每次校验token的过期时间,如果token快要过期(设置一个合理的时间,防止页面多个ajax请求导致现有token过期,比如三分钟。此处我个人猜测跟微信的那个token类似,就是每次你获取新的token后,旧的的token还有一定的缓冲期),则颁发新的token。
前端我这边用的angularJs,前端http拦截器中获取每次检测是否颁发了新的token,如果颁发了的话,则替换旧的。
检测token时间过期比较简单,后端代码就不放了
前端代码如下:
.factory('authInterceptor', function($q, $rootScope, userService) {
return {
request : function(config) {
config.headers = config.headers || {};
//设置认证token
config.headers.Authorization = userService.getCode();
return config;
},
response : function(response) {
if(response.status == 401 || (response.data && response.data.code == 401)) {
$rootScope.$emit('userIntercepted', 'notLogin', response);
return;
}
//检测到新的token,则替换新的token
if(response.headers('token')) {
userService.putCode(response.headers('token'));
}
return response;
},
responseError : function(rejection) {
if(rejection.status == 401 || (rejection.data && rejection.data.code == 401)) {
$rootScope.$emit('userIntercepted', 'notLogin', rejection);
return;
}
return $q.reject(rejection);
}
}
})