diff --git a/mall_auth/src/main/java/com/mall/auth/controller/AuthController.java b/mall_auth/src/main/java/com/mall/auth/controller/AuthController.java index 0737bf2..1081b78 100644 --- a/mall_auth/src/main/java/com/mall/auth/controller/AuthController.java +++ b/mall_auth/src/main/java/com/mall/auth/controller/AuthController.java @@ -1,16 +1,21 @@ package com.mall.auth.controller; import com.mall.auth.service.AuthService; +import com.mall.common.constant.JwtConstants; +import com.mall.common.constant.TokenConstants; import com.mall.common.domain.UserInfo; import com.mall.common.domain.request.LoginRequest; import com.mall.common.domain.vo.LoginVo; import com.mall.common.domain.vo.UserInfoVo; import com.mall.common.result.Result; +import com.mall.common.utils.IdUtils; +import com.mall.common.utils.JwtUtils; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; +import java.util.HashMap; /** * @Author: lzh @@ -77,4 +82,9 @@ public class AuthController { Result result = authService.userInfo(); return result; } + + @GetMapping("refreshToken") + public Result refreshToken(@RequestParam String refreshToken){ + return authService.refreshToken(refreshToken); + } } diff --git a/mall_auth/src/main/java/com/mall/auth/service/AuthService.java b/mall_auth/src/main/java/com/mall/auth/service/AuthService.java index 7f19a8b..7d82c57 100644 --- a/mall_auth/src/main/java/com/mall/auth/service/AuthService.java +++ b/mall_auth/src/main/java/com/mall/auth/service/AuthService.java @@ -16,4 +16,7 @@ public interface AuthService { Result phoneRegister(UserInfoVo userInfo); Result userInfo(); + + Result refreshToken(String refreshToken); + } diff --git a/mall_auth/src/main/java/com/mall/auth/service/impl/AuthServiceImpl.java b/mall_auth/src/main/java/com/mall/auth/service/impl/AuthServiceImpl.java index c887c83..9e8be4d 100644 --- a/mall_auth/src/main/java/com/mall/auth/service/impl/AuthServiceImpl.java +++ b/mall_auth/src/main/java/com/mall/auth/service/impl/AuthServiceImpl.java @@ -55,19 +55,20 @@ public class AuthServiceImpl implements AuthService { Assert.notNull( data,"用户不存在" ); -// String password = SecureUtil.md5( -// loginVo.getPassword()+ "|" + data.getSalt() -// ); if (!loginVo.getPassword().equals(data.getPassword())){ throw new BizException("密码错误") ; } HashMap map = new HashMap<>(); map.put(JwtConstants.USER_KEY,data.getId()); String token = JwtUtils.createToken(map); - redisCache.setCacheObject(TokenConstants.LOGIN_TOKEN_KEY+token,data,TokenConstants.EXPIRATION, TimeUnit.HOURS); + String refreshToken = JwtUtils.createToken(map); + redisCache.setCacheObject(TokenConstants.TOKEN+token,data,TokenConstants.EXPIRATION, TimeUnit.HOURS); + redisCache.setCacheObject(TokenConstants.REFRESH_TOKEN+refreshToken,data,TokenConstants.REFRESH_TIME,TimeUnit.HOURS); JwtResponse jwtResponse = new JwtResponse(); jwtResponse.setToken(token); - jwtResponse.setEndTim(TokenConstants.EXPIRATION); + jwtResponse.setEndTime(TokenConstants.EXPIRATION); + jwtResponse.setRefreshToken(refreshToken); + jwtResponse.setRefreshEndTime(TokenConstants.REFRESH_TIME); return Result.success(jwtResponse); } @@ -110,10 +111,10 @@ public class AuthServiceImpl implements AuthService { String userKey = IdUtils.genId(); map.put(JwtConstants.USER_KEY,userKey); String token = JwtUtils.createToken(map); - redisCache.setCacheObject(TokenConstants.LOGIN_TOKEN_KEY+token,data,TokenConstants.EXPIRATION, TimeUnit.HOURS); + redisCache.setCacheObject(TokenConstants.TOKEN+token,data,TokenConstants.EXPIRATION, TimeUnit.MINUTES); JwtResponse jwtResponse = new JwtResponse(); jwtResponse.setToken(token); - jwtResponse.setEndTim(TokenConstants.EXPIRATION); + jwtResponse.setEndTime(TokenConstants.EXPIRATION); return Result.success(jwtResponse); } @@ -149,11 +150,21 @@ public class AuthServiceImpl implements AuthService { @Override public Result userInfo() { - String token = request.getHeader(TokenConstants.LOGIN_TOKEN_KEY); + String token = request.getHeader(TokenConstants.TOKEN); if (StringUtils.isBlank(token)){ throw new BizException(401,"未登录"); } - UserInfo userInfo = redisCache.getCacheObject(TokenConstants.LOGIN_TOKEN_KEY + token); + UserInfo userInfo = redisCache.getCacheObject(TokenConstants.TOKEN + token); return Result.success(userInfo); } + + @Override + public Result refreshToken(String refreshToken) { + UserInfo userInfo = redisCache.getCacheObject(TokenConstants.REFRESH_TOKEN + refreshToken); + HashMap map = new HashMap<>(); + map.put(JwtConstants.USER_KEY, IdUtils.genId()); + String token = JwtUtils.createToken(map); + redisCache.setCacheObject(TokenConstants.TOKEN+token,userInfo,TokenConstants.EXPIRATION,TimeUnit.MINUTES); + return Result.success(token); + } } \ No newline at end of file diff --git a/mall_common/src/main/java/com/mall/common/constant/TokenConstants.java b/mall_common/src/main/java/com/mall/common/constant/TokenConstants.java index 4c18cc5..a7c16df 100644 --- a/mall_common/src/main/java/com/mall/common/constant/TokenConstants.java +++ b/mall_common/src/main/java/com/mall/common/constant/TokenConstants.java @@ -16,9 +16,13 @@ public class TokenConstants { /** * 权限缓存前缀 */ - public final static String LOGIN_TOKEN_KEY = "login_tokens:"; + public final static String LOGIN_TOKEN_KEY = "login_tokens"; /** * token标识 */ public static final String TOKEN = "token"; + /** + * refreshToken标识 + */ + public static final String REFRESH_TOKEN = "refresh_token"; } diff --git a/mall_common/src/main/java/com/mall/common/domain/response/JwtResponse.java b/mall_common/src/main/java/com/mall/common/domain/response/JwtResponse.java index 617e7f9..fc0dac1 100644 --- a/mall_common/src/main/java/com/mall/common/domain/response/JwtResponse.java +++ b/mall_common/src/main/java/com/mall/common/domain/response/JwtResponse.java @@ -17,5 +17,9 @@ import lombok.NoArgsConstructor; @NoArgsConstructor public class JwtResponse { private String token; - private Long endTim; + private Long endTime; + + private String refreshToken; + private Long refreshEndTime; + } diff --git a/mall_gateway/src/main/java/com/mall/gateway/filters/AuthFilter.java b/mall_gateway/src/main/java/com/mall/gateway/filters/AuthFilter.java index 5abcdac..ea0efed 100644 --- a/mall_gateway/src/main/java/com/mall/gateway/filters/AuthFilter.java +++ b/mall_gateway/src/main/java/com/mall/gateway/filters/AuthFilter.java @@ -1,6 +1,9 @@ package com.mall.gateway.filters; +import com.mall.common.constant.JwtConstants; import com.mall.common.constant.TokenConstants; +import com.mall.common.domain.UserInfo; import com.mall.common.redis.RedisCache; +import com.mall.common.utils.IdUtils; import com.mall.common.utils.JwtUtils; import com.mall.common.utils.StringUtils; import com.mall.gateway.config.IgnoreWhiteConfig; @@ -18,6 +21,10 @@ import org.springframework.stereotype.Component; import org.springframework.web.server.ServerWebExchange; import reactor.core.publisher.Mono; +import java.util.HashMap; +import java.util.Map; +import java.util.UUID; + /** * @description: 鉴权过滤器 * @author DongZl @@ -58,7 +65,7 @@ public class AuthFilter implements GlobalFilter, Ordered { Claims claims = JwtUtils.parseToken(token); if (claims == null) { - return GatewayUtils.errorResponse(exchange, "令牌已过期或验证不正确!"); + return GatewayUtils.errorResponse(exchange, "验证不正确!"); } boolean login = redisCache.hasKey(TokenConstants.TOKEN + token); diff --git a/mall_modules/mall_server/src/main/java/com/mall/server/service/impl/SpikesServiceImpl.java b/mall_modules/mall_server/src/main/java/com/mall/server/service/impl/SpikesServiceImpl.java index c901865..06693f6 100644 --- a/mall_modules/mall_server/src/main/java/com/mall/server/service/impl/SpikesServiceImpl.java +++ b/mall_modules/mall_server/src/main/java/com/mall/server/service/impl/SpikesServiceImpl.java @@ -206,11 +206,11 @@ public class SpikesServiceImpl extends ServiceImpl } public UserInfo getLogin(){ - String token = request.getHeader(TokenConstants.LOGIN_TOKEN_KEY); + String token = request.getHeader(TokenConstants.TOKEN); if (StringUtils.isBlank(token)){ throw new BizException(401,"未登录"); } - UserInfo userInfo = redisCache.getCacheObject(TokenConstants.LOGIN_TOKEN_KEY + token); + UserInfo userInfo = redisCache.getCacheObject(TokenConstants.TOKEN + token); return userInfo; }