From 49148072078220c92f94f2e7ea25cd79a6810fc7 Mon Sep 17 00:00:00 2001 From: zhibing.pu <393733352@qq.com> Date: 星期六, 24 八月 2024 15:31:37 +0800 Subject: [PATCH] 封装支付宝支付和完善充电支付功能 --- ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/service/TokenService.java | 396 +++++++++++++++++++++++++++----------------------------- 1 files changed, 193 insertions(+), 203 deletions(-) diff --git a/ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/service/TokenService.java b/ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/service/TokenService.java index 2cdbed5..4cce577 100644 --- a/ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/service/TokenService.java +++ b/ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/service/TokenService.java @@ -22,210 +22,200 @@ /** * token验证处理 - * + * * @author ruoyi */ @Component -public class TokenService -{ - @Autowired - private RedisService redisService; - - protected static final long MILLIS_SECOND = 1000; - - protected static final long MILLIS_MINUTE = 60 * MILLIS_SECOND; - - private final static long expireTime = CacheConstants.EXPIRATION; - private final static long expireAppletTime = CacheConstants.EXPIRATION_APPLET; - - private final static String ACCESS_TOKEN = CacheConstants.LOGIN_TOKEN_KEY; - - private final static Long MILLIS_MINUTE_TEN = CacheConstants.REFRESH_TIME * MILLIS_MINUTE; - - /** - * 创建令牌 - */ - public Map<String, Object> createToken(LoginUser loginUser) - { - String token = IdUtils.fastUUID(); - Long userId = loginUser.getSysUser().getUserId(); - String userName = loginUser.getSysUser().getUserName(); - loginUser.setToken(token); - loginUser.setUserid(userId); - loginUser.setUsername(userName); - loginUser.setIpaddr(IpUtils.getIpAddr()); - refreshToken(loginUser); - - // Jwt存储信息 - Map<String, Object> claimsMap = new HashMap<String, Object>(); - claimsMap.put(SecurityConstants.USER_KEY, token); - claimsMap.put(SecurityConstants.DETAILS_USER_ID, userId); - claimsMap.put(SecurityConstants.USER_TYPE, "system"); - claimsMap.put(SecurityConstants.DETAILS_USERNAME, userName); - - // 接口返回信息 - Map<String, Object> rspMap = new HashMap<String, Object>(); - rspMap.put("access_token", JwtUtils.createToken(claimsMap)); - rspMap.put("expires_in", expireTime); - return rspMap; - } - /** - * 创建小程序令牌 - */ - public Map<String, Object> createTokenApplet(LoginUserApplet loginUser) { - String token = IdUtils.fastUUID(); - Long userId = loginUser.getUserId(); - String name = loginUser.getName(); - loginUser.setToken(token); - loginUser.setIpaddr(IpUtils.getIpAddr()); - refreshToken1(loginUser); - // Jwt存储信息 - Map<String, Object> claimsMap = new HashMap<String, Object>(); - claimsMap.put(SecurityConstants.USER_APPLET_KEY, token); - claimsMap.put(SecurityConstants.DETAILS_USER_ID, userId); - claimsMap.put(SecurityConstants.USER_TYPE, "applet"); - claimsMap.put(SecurityConstants.DETAILS_USERNAME, name); - // 接口返回信息 - Map<String, Object> rspMap = new HashMap<String, Object>(); - rspMap.put("access_token", JwtUtils.createToken(claimsMap)); - rspMap.put("expires_in", expireAppletTime); - return rspMap; - } - public LoginUserApplet getLoginUserApplet() { - LoginUserApplet loginUserAppletToken = getLoginUserAppletToken(ServletUtils.getRequest()); - if (loginUserAppletToken == null){ - throw new UserAppletException("登录失效,请重新登录!", 401); - } - return loginUserAppletToken; - } - public LoginUserApplet getLoginUserAppletToken(HttpServletRequest request) { - // 获取请求携带的令牌 - String token = SecurityUtils.getToken(request); - return getLoginUserApplet(token); - } - /** - * 小程序 获取用户身份信息 - * - * @return 用户信息 - */ - public LoginUserApplet getLoginUserApplet(String token) { - LoginUserApplet user = null; - try { - if (StringUtils.isNotEmpty(token)) { - String userKey = JwtUtils.getUserKeyApplet(token); - user = redisService.getCacheObject(getTokenKey(userKey)); - return user; - } - } catch (Exception e) { - e.printStackTrace(); - } - return user; - } - /** - * 获取用户身份信息 - * - * @return 用户信息 - */ - public LoginUser getLoginUser() - { - return getLoginUser(ServletUtils.getRequest()); - } - - /** - * 获取用户身份信息 - * - * @return 用户信息 - */ - public LoginUser getLoginUser(HttpServletRequest request) - { - // 获取请求携带的令牌 - String token = SecurityUtils.getToken(request); - return getLoginUser(token); - } - - /** - * 获取用户身份信息 - * - * @return 用户信息 - */ - public LoginUser getLoginUser(String token) - { - LoginUser user = null; - try - { - if (StringUtils.isNotEmpty(token)) - { - String userkey = JwtUtils.getUserKey(token); - user = redisService.getCacheObject(getTokenKey(userkey)); - return user; - } - } - catch (Exception e) - { - } - return user; - } - - /** - * 设置用户身份信息 - */ - public void setLoginUser(LoginUser loginUser) - { - if (StringUtils.isNotNull(loginUser) && StringUtils.isNotEmpty(loginUser.getToken())) - { - refreshToken(loginUser); - } - } - - /** - * 删除用户缓存信息 - */ - public void delLoginUser(String token) - { - if (StringUtils.isNotEmpty(token)) - { - String userkey = JwtUtils.getUserKey(token); - redisService.deleteObject(getTokenKey(userkey)); - } - } - - /** - * 验证令牌有效期,相差不足120分钟,自动刷新缓存 - * - * @param loginUser - */ - public void verifyToken(LoginUser loginUser) - { - long expireTime = loginUser.getExpireTime(); - long currentTime = System.currentTimeMillis(); - if (expireTime - currentTime <= MILLIS_MINUTE_TEN) - { - refreshToken(loginUser); - } - } - - /** - * 刷新令牌有效期 - * - * @param loginUser 登录信息 - */ - public void refreshToken(LoginUser loginUser) - { - loginUser.setLoginTime(System.currentTimeMillis()); - loginUser.setExpireTime(loginUser.getLoginTime() + expireTime * MILLIS_MINUTE); - // 根据uuid将loginUser缓存 - String userKey = getTokenKey(loginUser.getToken()); - redisService.setCacheObject(userKey, loginUser, expireTime, TimeUnit.MINUTES); - } - public void refreshToken1(LoginUserApplet dto) { - dto.setLoginTime(System.currentTimeMillis()); - dto.setExpireTime(dto.getLoginTime() + expireTime * MILLIS_MINUTE); - // 根据uuid将loginUser缓存 - String userKey = getTokenKey(dto.getToken()); - redisService.setCacheObject(userKey, dto, expireTime, TimeUnit.MINUTES); - } - private String getTokenKey(String token) - { - return ACCESS_TOKEN + token; - } +public class TokenService { + @Autowired + private RedisService redisService; + + protected static final long MILLIS_SECOND = 1000; + + protected static final long MILLIS_MINUTE = 60 * MILLIS_SECOND; + + private final static long expireTime = CacheConstants.EXPIRATION; + private final static long expireAppletTime = CacheConstants.EXPIRATION_APPLET; + + private final static String ACCESS_TOKEN = CacheConstants.LOGIN_TOKEN_KEY; + + private final static Long MILLIS_MINUTE_TEN = CacheConstants.REFRESH_TIME * MILLIS_MINUTE; + + /** + * 创建令牌 + */ + public Map<String, Object> createToken(LoginUser loginUser) { + String token = IdUtils.fastUUID(); + Long userId = loginUser.getSysUser().getUserId(); + String userName = loginUser.getSysUser().getUserName(); + loginUser.setToken(token); + loginUser.setUserid(userId); + loginUser.setUsername(userName); + loginUser.setIpaddr(IpUtils.getIpAddr()); + refreshToken(loginUser); + + // Jwt存储信息 + Map<String, Object> claimsMap = new HashMap<String, Object>(); + claimsMap.put(SecurityConstants.USER_KEY, token); + claimsMap.put(SecurityConstants.DETAILS_USER_ID, userId); + claimsMap.put(SecurityConstants.USER_TYPE, "system"); + claimsMap.put(SecurityConstants.DETAILS_USERNAME, userName); + + // 接口返回信息 + Map<String, Object> rspMap = new HashMap<String, Object>(); + rspMap.put("access_token", JwtUtils.createToken(claimsMap)); + rspMap.put("expires_in", expireTime); + return rspMap; + } + + /** + * 创建小程序令牌 + */ + public Map<String, Object> createTokenApplet(LoginUserApplet loginUser) { + String token = IdUtils.fastUUID(); + Long userId = loginUser.getUserId(); + String name = loginUser.getName(); + loginUser.setToken(token); + loginUser.setIpaddr(IpUtils.getIpAddr()); + refreshToken1(loginUser); + // Jwt存储信息 + Map<String, Object> claimsMap = new HashMap<String, Object>(); + claimsMap.put(SecurityConstants.USER_APPLET_KEY, token); + claimsMap.put(SecurityConstants.DETAILS_USER_ID, userId); + claimsMap.put(SecurityConstants.USER_TYPE, "applet"); + claimsMap.put(SecurityConstants.DETAILS_USERNAME, name); + // 接口返回信息 + Map<String, Object> rspMap = new HashMap<String, Object>(); + rspMap.put("access_token", JwtUtils.createToken(claimsMap)); + rspMap.put("expires_in", expireAppletTime); + return rspMap; + } + + public LoginUserApplet getLoginUserApplet() { + LoginUserApplet loginUserAppletToken = getLoginUserAppletToken(ServletUtils.getRequest()); + if (loginUserAppletToken == null) { + throw new UserAppletException("登录失效,请重新登录!", 401); + } + return loginUserAppletToken; + } + + public LoginUserApplet getLoginUserAppletToken(HttpServletRequest request) { + // 获取请求携带的令牌 + String token = SecurityUtils.getToken(request); + return getLoginUserApplet(token); + } + + /** + * 小程序 获取用户身份信息 + * + * @return 用户信息 + */ + public LoginUserApplet getLoginUserApplet(String token) { + LoginUserApplet user = null; + try { + if (StringUtils.isNotEmpty(token)) { + String userKey = JwtUtils.getUserKeyApplet(token); + user = redisService.getCacheObject(getTokenKey(userKey)); + return user; + } + } catch (Exception e) { + e.printStackTrace(); + } + return user; + } + + /** + * 获取用户身份信息 + * + * @return 用户信息 + */ + public LoginUser getLoginUser() { + return getLoginUser(ServletUtils.getRequest()); + } + + /** + * 获取用户身份信息 + * + * @return 用户信息 + */ + public LoginUser getLoginUser(HttpServletRequest request) { + // 获取请求携带的令牌 + String token = SecurityUtils.getToken(request); + return getLoginUser(token); + } + + /** + * 获取用户身份信息 + * + * @return 用户信息 + */ + public LoginUser getLoginUser(String token) { + LoginUser user = null; + try { + if (StringUtils.isNotEmpty(token)) { + String userkey = JwtUtils.getUserKey(token); + user = redisService.getCacheObject(getTokenKey(userkey)); + return user; + } + } catch (Exception e) { + } + return user; + } + + /** + * 设置用户身份信息 + */ + public void setLoginUser(LoginUser loginUser) { + if (StringUtils.isNotNull(loginUser) && StringUtils.isNotEmpty(loginUser.getToken())) { + refreshToken(loginUser); + } + } + + /** + * 删除用户缓存信息 + */ + public void delLoginUser(String token) { + if (StringUtils.isNotEmpty(token)) { + String userkey = JwtUtils.getUserKey(token); + redisService.deleteObject(getTokenKey(userkey)); + } + } + + /** + * 验证令牌有效期,相差不足120分钟,自动刷新缓存 + * + * @param loginUser + */ + public void verifyToken(LoginUser loginUser) { + long expireTime = loginUser.getExpireTime(); + long currentTime = System.currentTimeMillis(); + if (expireTime - currentTime <= MILLIS_MINUTE_TEN) { + refreshToken(loginUser); + } + } + + /** + * 刷新令牌有效期 + * + * @param loginUser 登录信息 + */ + public void refreshToken(LoginUser loginUser) { + loginUser.setLoginTime(System.currentTimeMillis()); + loginUser.setExpireTime(loginUser.getLoginTime() + expireTime * MILLIS_MINUTE); + // 根据uuid将loginUser缓存 + String userKey = getTokenKey(loginUser.getToken()); + redisService.setCacheObject(userKey, loginUser, expireTime, TimeUnit.MINUTES); + } + + public void refreshToken1(LoginUserApplet dto) { + dto.setLoginTime(System.currentTimeMillis()); + dto.setExpireTime(dto.getLoginTime() + expireTime * MILLIS_MINUTE); + // 根据uuid将loginUser缓存 + String userKey = getTokenKey(dto.getToken()); + redisService.setCacheObject(userKey, dto, expireTime, TimeUnit.MINUTES); + } + + private String getTokenKey(String token) { + return ACCESS_TOKEN + token; + } } \ No newline at end of file -- Gitblit v1.7.1