刷新token修改
This commit is contained in:
@@ -63,13 +63,13 @@ public class UmsAdminController {
|
||||
}
|
||||
|
||||
@ApiOperation(value = "刷新token")
|
||||
@RequestMapping(value = "/token/refresh", method = RequestMethod.GET)
|
||||
@RequestMapping(value = "/refreshToken", method = RequestMethod.GET)
|
||||
@ResponseBody
|
||||
public CommonResult refreshToken(HttpServletRequest request) {
|
||||
String token = request.getHeader(tokenHeader);
|
||||
String refreshToken = adminService.refreshToken(token);
|
||||
if (refreshToken == null) {
|
||||
return CommonResult.failed();
|
||||
return CommonResult.failed("token已经过期!");
|
||||
}
|
||||
Map<String, String> tokenMap = new HashMap<>();
|
||||
tokenMap.put("token", refreshToken);
|
||||
|
||||
@@ -12,6 +12,7 @@ import org.springframework.web.bind.annotation.RequestMethod;
|
||||
import org.springframework.web.bind.annotation.RequestParam;
|
||||
import org.springframework.web.bind.annotation.ResponseBody;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
@@ -23,6 +24,8 @@ import java.util.Map;
|
||||
@Api(tags = "UmsMemberController", description = "会员登录注册管理")
|
||||
@RequestMapping("/sso")
|
||||
public class UmsMemberController {
|
||||
@Value("${jwt.tokenHeader}")
|
||||
private String tokenHeader;
|
||||
@Value("${jwt.tokenHead}")
|
||||
private String tokenHead;
|
||||
@Autowired
|
||||
@@ -68,4 +71,19 @@ public class UmsMemberController {
|
||||
@RequestParam String authCode) {
|
||||
return memberService.updatePassword(telephone,password,authCode);
|
||||
}
|
||||
|
||||
@ApiOperation(value = "刷新token")
|
||||
@RequestMapping(value = "/refreshToken", method = RequestMethod.GET)
|
||||
@ResponseBody
|
||||
public CommonResult refreshToken(HttpServletRequest request) {
|
||||
String token = request.getHeader(tokenHeader);
|
||||
String refreshToken = memberService.refreshToken(token);
|
||||
if (refreshToken == null) {
|
||||
return CommonResult.failed("token已经过期!");
|
||||
}
|
||||
Map<String, String> tokenMap = new HashMap<>();
|
||||
tokenMap.put("token", refreshToken);
|
||||
tokenMap.put("tokenHead", tokenHead);
|
||||
return CommonResult.success(tokenMap);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -56,4 +56,9 @@ public interface UmsMemberService {
|
||||
* 登录后获取token
|
||||
*/
|
||||
String login(String username, String password);
|
||||
|
||||
/**
|
||||
* 刷新token
|
||||
*/
|
||||
String refreshToken(String token);
|
||||
}
|
||||
|
||||
@@ -177,6 +177,11 @@ public class UmsMemberServiceImpl implements UmsMemberService {
|
||||
return token;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String refreshToken(String token) {
|
||||
return jwtTokenUtil.refreshHeadToken(token);
|
||||
}
|
||||
|
||||
//对输入的验证码进行校验
|
||||
private boolean verifyAuthCode(String authCode, String telephone){
|
||||
if(StringUtils.isEmpty(authCode)){
|
||||
|
||||
@@ -54,7 +54,7 @@ jwt:
|
||||
tokenHeader: Authorization #JWT存储的请求头
|
||||
secret: mall-portal-secret #JWT加解密使用的密钥
|
||||
expiration: 604800 #JWT的超期限时间(60*60*24)
|
||||
tokenHead: Bearer #JWT负载中拿到开头
|
||||
tokenHead: Bearer #JWT负载中拿到开头
|
||||
ignored: #安全路径白名单
|
||||
urls:
|
||||
- /swagger-ui.html
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
package com.macro.mall.security.util;
|
||||
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import io.jsonwebtoken.Claims;
|
||||
import io.jsonwebtoken.Jwts;
|
||||
import io.jsonwebtoken.SignatureAlgorithm;
|
||||
@@ -120,25 +122,49 @@ public class JwtTokenUtil {
|
||||
}
|
||||
|
||||
/**
|
||||
* 判断token是否可以被刷新
|
||||
*/
|
||||
private boolean canRefresh(String token) {
|
||||
return !isTokenExpired(token);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 当原来的token没过期是可以刷新
|
||||
* 当原来的token没过期时是可以刷新的
|
||||
*
|
||||
* @param oldToken 带tokenHead的token
|
||||
*/
|
||||
public String refreshHeadToken(String oldToken) {
|
||||
if(StrUtil.isEmpty(oldToken)){
|
||||
return null;
|
||||
}
|
||||
String token = oldToken.substring(tokenHead.length());
|
||||
if (canRefresh(token)) {
|
||||
Claims claims = getClaimsFromToken(token);
|
||||
if(StrUtil.isEmpty(token)){
|
||||
return null;
|
||||
}
|
||||
//token校验不通过
|
||||
Claims claims = getClaimsFromToken(token);
|
||||
if(claims==null){
|
||||
return null;
|
||||
}
|
||||
//如果token已经过期,不支持刷新
|
||||
if(isTokenExpired(token)){
|
||||
return null;
|
||||
}
|
||||
//如果token在30分钟之内刚刷新过,返回原token
|
||||
if(tokenRefreshJustBefore(token,30*60)){
|
||||
return token;
|
||||
}else{
|
||||
claims.put(CLAIM_KEY_CREATED, new Date());
|
||||
return generateToken(claims);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* 判断token在指定时间内是否刚刚刷新过
|
||||
* @param token 原token
|
||||
* @param time 指定时间(秒)
|
||||
*/
|
||||
private boolean tokenRefreshJustBefore(String token, int time) {
|
||||
Claims claims = getClaimsFromToken(token);
|
||||
Date created = claims.get(CLAIM_KEY_CREATED, Date.class);
|
||||
Date refreshDate = new Date();
|
||||
//刷新时间在创建时间的指定时间内
|
||||
if(refreshDate.after(created)&&refreshDate.before(DateUtil.offsetSecond(created,time))){
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user