diff --git a/online-taxi-public/api-passenger/src/main/java/com/taxi/apipassenger/controller/TokenController.java b/online-taxi-public/api-passenger/src/main/java/com/taxi/apipassenger/controller/TokenController.java new file mode 100644 index 0000000..22f2b39 --- /dev/null +++ b/online-taxi-public/api-passenger/src/main/java/com/taxi/apipassenger/controller/TokenController.java @@ -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()); + } + +} diff --git a/online-taxi-public/api-passenger/src/main/java/com/taxi/apipassenger/interceptor/JwtInterceptor.java b/online-taxi-public/api-passenger/src/main/java/com/taxi/apipassenger/interceptor/JwtInterceptor.java index 0ac081f..1fae85f 100644 --- a/online-taxi-public/api-passenger/src/main/java/com/taxi/apipassenger/interceptor/JwtInterceptor.java +++ b/online-taxi-public/api-passenger/src/main/java/com/taxi/apipassenger/interceptor/JwtInterceptor.java @@ -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; - } } } diff --git a/online-taxi-public/api-passenger/src/main/java/com/taxi/apipassenger/service/TokenService.java b/online-taxi-public/api-passenger/src/main/java/com/taxi/apipassenger/service/TokenService.java new file mode 100644 index 0000000..ac6e397 --- /dev/null +++ b/online-taxi-public/api-passenger/src/main/java/com/taxi/apipassenger/service/TokenService.java @@ -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); + } +} diff --git a/online-taxi-public/api-passenger/src/main/java/com/taxi/apipassenger/service/VerificationCodeService.java b/online-taxi-public/api-passenger/src/main/java/com/taxi/apipassenger/service/VerificationCodeService.java index cda9a3e..a639373 100644 --- a/online-taxi-public/api-passenger/src/main/java/com/taxi/apipassenger/service/VerificationCodeService.java +++ b/online-taxi-public/api-passenger/src/main/java/com/taxi/apipassenger/service/VerificationCodeService.java @@ -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); + + /** + * 生成双token并且保存到redis + */ + TokenResponse tokenResponse = TokenUtil.proDoubleTokenAndSaveRedis(stringRedisTemplate, + passenegerPhone); + + return ResponseResult.success(tokenResponse); } } else { CommonStatusEnum.VERIFICATION_CODE_ERROR.setMessage("验证码错误!"); return ResponseResult.fail(CommonStatusEnum.VERIFICATION_CODE_ERROR); } } + + + } diff --git a/online-taxi-public/api-passenger/src/main/java/com/taxi/apipassenger/util/TokenUtil.java b/online-taxi-public/api-passenger/src/main/java/com/taxi/apipassenger/util/TokenUtil.java new file mode 100644 index 0000000..287f75d --- /dev/null +++ b/online-taxi-public/api-passenger/src/main/java/com/taxi/apipassenger/util/TokenUtil.java @@ -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 { + + /** + * 生成双token并且保存到redis + * 动作一致 + */ + 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; + } +} diff --git a/online-taxi-public/api-passenger/target/classes/com/taxi/apipassenger/service/VerificationCodeService.class b/online-taxi-public/api-passenger/target/classes/com/taxi/apipassenger/service/VerificationCodeService.class index 4d0d81c..cef1aa8 100644 Binary files a/online-taxi-public/api-passenger/target/classes/com/taxi/apipassenger/service/VerificationCodeService.class and b/online-taxi-public/api-passenger/target/classes/com/taxi/apipassenger/service/VerificationCodeService.class differ diff --git a/online-taxi-public/internal-common/src/main/java/com/internal/contant/CommonStatusEnum.java b/online-taxi-public/internal-common/src/main/java/com/internal/contant/CommonStatusEnum.java index c5088f6..fb3b29b 100644 --- a/online-taxi-public/internal-common/src/main/java/com/internal/contant/CommonStatusEnum.java +++ b/online-taxi-public/internal-common/src/main/java/com/internal/contant/CommonStatusEnum.java @@ -2,6 +2,11 @@ package com.internal.contant; public enum CommonStatusEnum { + /** + *TOKEN类提示:1100 - 1199 + */ + TOKEN_ERROR(1199,"token 错误"), + /** * */ @@ -10,12 +15,15 @@ public enum CommonStatusEnum { * 成功 */ SUCCESS(1,"success"), + /** * 失败 */ FAIL(0,"fail"); + + private int code; private String message; diff --git a/online-taxi-public/internal-common/src/main/java/com/internal/response/CheckCodeResponse.java b/online-taxi-public/internal-common/src/main/java/com/internal/response/TokenResponse.java similarity index 79% rename from online-taxi-public/internal-common/src/main/java/com/internal/response/CheckCodeResponse.java rename to online-taxi-public/internal-common/src/main/java/com/internal/response/TokenResponse.java index 24b324e..53e0902 100644 --- a/online-taxi-public/internal-common/src/main/java/com/internal/response/CheckCodeResponse.java +++ b/online-taxi-public/internal-common/src/main/java/com/internal/response/TokenResponse.java @@ -3,7 +3,7 @@ package com.internal.response; import lombok.Data; @Data -public class CheckCodeResponse { +public class TokenResponse { private String accessToken; diff --git a/online-taxi-public/internal-common/src/main/java/com/internal/util/JwtUtils.java b/online-taxi-public/internal-common/src/main/java/com/internal/util/JwtUtils.java index 1325896..9374688 100644 --- a/online-taxi-public/internal-common/src/main/java/com/internal/util/JwtUtils.java +++ b/online-taxi-public/internal-common/src/main/java/com/internal/util/JwtUtils.java @@ -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; + } + }