刷新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");
//解析token
TokenResult tokenResult = null;
try {
//解析token
tokenResult =JwtUtils.parseToken(token);
} catch (SignatureException exception) {
resultStr = "token sign error ";
resultBoolean = false;
}catch (TokenExpiredException ex){
resultStr = "token time out";
resultBoolean = false;
}catch (Exception exception){
resultBoolean = false;
}
TokenResult tokenResult = JwtUtils.checkToken(token);
// try {
// //解析token
// tokenResult =JwtUtils.parseToken(token);
// } catch (SignatureException exception) {
// resultStr = "token sign error ";
// resultBoolean = false;
// }catch (TokenExpiredException ex){
// resultStr = "token time out";
// resultBoolean = false;
// }catch (Exception exception){
// resultBoolean = false;
// }
if(tokenResult == null){
resultStr = "token sign error ";
resultStr = "token invalid ";
resultBoolean = false;
}else{
//拼接tokenKey
@ -52,14 +52,9 @@ public class JwtInterceptor implements HandlerInterceptor {
String tokenKey = RedisPrefixUtils.getTokenPrefixKey(phone,identity, TokenConstant.ACCESS_TOKEN_TYPE);
//从redis中取出token
String redisToke = stringRedisTemplate.opsForValue().get(tokenKey);
if(StringUtils.isBlank(redisToke)){
if(StringUtils.isBlank(redisToke) || (!token.trim().equals(redisToke.trim()))){
resultStr = "token invalid ";
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.TokenConstant;
import com.internal.dto.ResponseResult;
import com.internal.dto.TokenResult;
import com.internal.request.VerificationCodeDTO;
import com.internal.response.CheckCodeResponse;
import com.internal.response.TokenResponse;
import com.internal.response.NumberResponse;
import com.internal.util.JwtUtils;
import com.internal.util.RedisPrefixUtils;
import com.taxi.apipassenger.remote.ServicePassengerUserClient;
import com.taxi.apipassenger.remote.ServiceVerificatoncodeClient;
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;
@ -68,29 +70,21 @@ public class VerificationCodeService {
VerificationCodeDTO verificationCodeDTO = new VerificationCodeDTO();
verificationCodeDTO.setPassengerPhone(passenegerPhone);
servicePassengerUserClient.loginOrReg(verificationCodeDTO);
//四、颁发令牌
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);
CheckCodeResponse checkCodeResponse = new CheckCodeResponse();
checkCodeResponse.setAccessToken(accessToken);
checkCodeResponse.setRefreshToken(refreshToken);
return ResponseResult.success(checkCodeResponse);
/**
* tokenredis
*/
TokenResponse tokenResponse = TokenUtil.proDoubleTokenAndSaveRedis(stringRedisTemplate,
passenegerPhone);
return ResponseResult.success(tokenResponse);
}
} else {
CommonStatusEnum.VERIFICATION_CODE_ERROR.setMessage("验证码错误!");
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 {
/**
*TOKEN1100 - 1199
*/
TOKEN_ERROR(1199,"token 错误"),
/**
*
*/
@ -10,12 +15,15 @@ public enum CommonStatusEnum {
*
*/
SUCCESS(1,"success"),
/**
*
*/
FAIL(0,"fail");
private int code;
private String message;

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

@ -69,5 +69,20 @@ public class JwtUtils {
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