刷新token代码编写

main
topsun 2 years ago
parent 5fbe1b6c8f
commit 4896454164

@ -0,0 +1,23 @@
package com.taxi.apipassenger.controller;
import com.internal.dto.ResponseResult;
import com.internal.response.TokenResponse;
import com.taxi.apipassenger.service.TokenService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class TokenController {
@Autowired
TokenService tokenService;
@PostMapping("/token-refresh")
public ResponseResult refreshToken(@RequestBody TokenResponse tokenResponse){
return tokenService.refreshToken(tokenResponse.getRefreshToken());
}
}

@ -29,21 +29,21 @@ public class JwtInterceptor implements HandlerInterceptor {
String token = request.getHeader("Authorization"); String token = request.getHeader("Authorization");
//解析token //解析token
TokenResult tokenResult = null; TokenResult tokenResult = JwtUtils.checkToken(token);
try { // try {
//解析token // //解析token
tokenResult =JwtUtils.parseToken(token); // tokenResult =JwtUtils.parseToken(token);
} catch (SignatureException exception) { // } catch (SignatureException exception) {
resultStr = "token sign error "; // resultStr = "token sign error ";
resultBoolean = false; // resultBoolean = false;
}catch (TokenExpiredException ex){ // }catch (TokenExpiredException ex){
resultStr = "token time out"; // resultStr = "token time out";
resultBoolean = false; // resultBoolean = false;
}catch (Exception exception){ // }catch (Exception exception){
resultBoolean = false; // resultBoolean = false;
} // }
if(tokenResult == null){ if(tokenResult == null){
resultStr = "token sign error "; resultStr = "token invalid ";
resultBoolean = false; resultBoolean = false;
}else{ }else{
//拼接tokenKey //拼接tokenKey
@ -52,14 +52,9 @@ public class JwtInterceptor implements HandlerInterceptor {
String tokenKey = RedisPrefixUtils.getTokenPrefixKey(phone,identity, TokenConstant.ACCESS_TOKEN_TYPE); String tokenKey = RedisPrefixUtils.getTokenPrefixKey(phone,identity, TokenConstant.ACCESS_TOKEN_TYPE);
//从redis中取出token //从redis中取出token
String redisToke = stringRedisTemplate.opsForValue().get(tokenKey); String redisToke = stringRedisTemplate.opsForValue().get(tokenKey);
if(StringUtils.isBlank(redisToke)){ if(StringUtils.isBlank(redisToke) || (!token.trim().equals(redisToke.trim()))){
resultStr = "token invalid "; resultStr = "token invalid ";
resultBoolean = false; resultBoolean = false;
}else{
if(!token.trim().equals(redisToke)){
resultStr = "token invalid ";
resultBoolean = false;
}
} }
} }

@ -0,0 +1,42 @@
package com.taxi.apipassenger.service;
import com.internal.contant.CommonStatusEnum;
import com.internal.contant.IdentityConstant;
import com.internal.contant.TokenConstant;
import com.internal.dto.ResponseResult;
import com.internal.dto.TokenResult;
import com.internal.response.TokenResponse;
import com.internal.util.JwtUtils;
import com.internal.util.RedisPrefixUtils;
import com.taxi.apipassenger.util.TokenUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Service;
@Service
public class TokenService {
@Autowired
private StringRedisTemplate stringRedisTemplate;
public ResponseResult refreshToken(String refreshToken) {
TokenResult tokenResult = JwtUtils.checkToken(refreshToken);
TokenResponse tokenResponse;
if (tokenResult == null) {
return ResponseResult.fail(CommonStatusEnum.TOKEN_ERROR);
}
String passenegerPhone = tokenResult.getPassengerPhone();
String refreshTokenKey = RedisPrefixUtils.getTokenPrefixKey(passenegerPhone,
IdentityConstant.PASSENGER_IDENTITY, TokenConstant.REFRESH_TOKEN_TYPE);
//从redis 缓存中获取refreshtoken
String redisRefreshToken = stringRedisTemplate.opsForValue().get(refreshTokenKey);
//判断refreshToken是否有效
if (redisRefreshToken.equals(refreshToken)) {//生成双token
tokenResponse = TokenUtil.proDoubleTokenAndSaveRedis(stringRedisTemplate,
passenegerPhone);
} else {
return ResponseResult.fail(CommonStatusEnum.TOKEN_ERROR);
}
return ResponseResult.success(tokenResponse);
}
}

@ -4,13 +4,15 @@ import com.internal.contant.CommonStatusEnum;
import com.internal.contant.IdentityConstant; import com.internal.contant.IdentityConstant;
import com.internal.contant.TokenConstant; import com.internal.contant.TokenConstant;
import com.internal.dto.ResponseResult; import com.internal.dto.ResponseResult;
import com.internal.dto.TokenResult;
import com.internal.request.VerificationCodeDTO; import com.internal.request.VerificationCodeDTO;
import com.internal.response.CheckCodeResponse; import com.internal.response.TokenResponse;
import com.internal.response.NumberResponse; import com.internal.response.NumberResponse;
import com.internal.util.JwtUtils; import com.internal.util.JwtUtils;
import com.internal.util.RedisPrefixUtils; import com.internal.util.RedisPrefixUtils;
import com.taxi.apipassenger.remote.ServicePassengerUserClient; import com.taxi.apipassenger.remote.ServicePassengerUserClient;
import com.taxi.apipassenger.remote.ServiceVerificatoncodeClient; import com.taxi.apipassenger.remote.ServiceVerificatoncodeClient;
import com.taxi.apipassenger.util.TokenUtil;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -68,29 +70,21 @@ public class VerificationCodeService {
VerificationCodeDTO verificationCodeDTO = new VerificationCodeDTO(); VerificationCodeDTO verificationCodeDTO = new VerificationCodeDTO();
verificationCodeDTO.setPassengerPhone(passenegerPhone); verificationCodeDTO.setPassengerPhone(passenegerPhone);
servicePassengerUserClient.loginOrReg(verificationCodeDTO); servicePassengerUserClient.loginOrReg(verificationCodeDTO);
//四、颁发令牌
String accessToken = JwtUtils.generatorToken(passenegerPhone, /**
IdentityConstant.PASSENGER_IDENTITY, TokenConstant.ACCESS_TOKEN_TYPE); * tokenredis
String refreshToken = JwtUtils.generatorToken(passenegerPhone, */
IdentityConstant.PASSENGER_IDENTITY,TokenConstant.REFRESH_TOKEN_TYPE); TokenResponse tokenResponse = TokenUtil.proDoubleTokenAndSaveRedis(stringRedisTemplate,
passenegerPhone);
//将accesstoken存入redis
String accessTokenKey = RedisPrefixUtils.getTokenPrefixKey(passenegerPhone, return ResponseResult.success(tokenResponse);
IdentityConstant.PASSENGER_IDENTITY,TokenConstant.ACCESS_TOKEN_TYPE);
stringRedisTemplate.opsForValue().set(accessTokenKey,accessToken,30,TimeUnit.DAYS);
//将refreshToken存入redis
String refreshTokenKey = RedisPrefixUtils.getTokenPrefixKey(passenegerPhone,
IdentityConstant.PASSENGER_IDENTITY,TokenConstant.REFRESH_TOKEN_TYPE);
stringRedisTemplate.opsForValue().set(refreshTokenKey,refreshToken,31,TimeUnit.DAYS);
CheckCodeResponse checkCodeResponse = new CheckCodeResponse();
checkCodeResponse.setAccessToken(accessToken);
checkCodeResponse.setRefreshToken(refreshToken);
return ResponseResult.success(checkCodeResponse);
} }
} else { } else {
CommonStatusEnum.VERIFICATION_CODE_ERROR.setMessage("验证码错误!"); CommonStatusEnum.VERIFICATION_CODE_ERROR.setMessage("验证码错误!");
return ResponseResult.fail(CommonStatusEnum.VERIFICATION_CODE_ERROR); return ResponseResult.fail(CommonStatusEnum.VERIFICATION_CODE_ERROR);
} }
} }
} }

@ -0,0 +1,41 @@
package com.taxi.apipassenger.util;
import com.internal.contant.IdentityConstant;
import com.internal.contant.TokenConstant;
import com.internal.response.TokenResponse;
import com.internal.util.JwtUtils;
import com.internal.util.RedisPrefixUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import java.util.concurrent.TimeUnit;
public class TokenUtil {
/**
* tokenredis
*
*/
public static TokenResponse proDoubleTokenAndSaveRedis(StringRedisTemplate stringRedisTemplate,
String passenegerPhone){
//四、颁发令牌
String accessToken = JwtUtils.generatorToken(passenegerPhone,
IdentityConstant.PASSENGER_IDENTITY, TokenConstant.ACCESS_TOKEN_TYPE);
String refreshToken = JwtUtils.generatorToken(passenegerPhone,
IdentityConstant.PASSENGER_IDENTITY,TokenConstant.REFRESH_TOKEN_TYPE);
//将accesstoken存入redis
String accessTokenKey = RedisPrefixUtils.getTokenPrefixKey(passenegerPhone,
IdentityConstant.PASSENGER_IDENTITY,TokenConstant.ACCESS_TOKEN_TYPE);
stringRedisTemplate.opsForValue().set(accessTokenKey,accessToken,30, TimeUnit.DAYS);
//将refreshToken存入redis
String refreshTokenKey = RedisPrefixUtils.getTokenPrefixKey(passenegerPhone,
IdentityConstant.PASSENGER_IDENTITY,TokenConstant.REFRESH_TOKEN_TYPE);
stringRedisTemplate.opsForValue().set(refreshTokenKey,refreshToken,31,TimeUnit.DAYS);
TokenResponse checkCodeResponse = new TokenResponse();
checkCodeResponse.setAccessToken(accessToken);
checkCodeResponse.setRefreshToken(refreshToken);
return checkCodeResponse;
}
}

@ -2,6 +2,11 @@ package com.internal.contant;
public enum CommonStatusEnum { public enum CommonStatusEnum {
/**
*TOKEN1100 - 1199
*/
TOKEN_ERROR(1199,"token 错误"),
/** /**
* *
*/ */
@ -10,12 +15,15 @@ public enum CommonStatusEnum {
* *
*/ */
SUCCESS(1,"success"), SUCCESS(1,"success"),
/** /**
* *
*/ */
FAIL(0,"fail"); FAIL(0,"fail");
private int code; private int code;
private String message; private String message;

@ -3,7 +3,7 @@ package com.internal.response;
import lombok.Data; import lombok.Data;
@Data @Data
public class CheckCodeResponse { public class TokenResponse {
private String accessToken; private String accessToken;

@ -69,5 +69,20 @@ public class JwtUtils {
return tokenResult; return tokenResult;
} }
/***
* token
* @param token
* @return
*/
public static TokenResult checkToken(String token){
TokenResult tokenResult = null;
try {
tokenResult = parseToken(token);
} catch (Exception e) {
throw new RuntimeException(e);
}
return tokenResult;
}
} }

Loading…
Cancel
Save