ruoyi-common/ruoyi-common-redis/src/main/java/com/ruoyi/common/redis/service/RedisService.java
@@ -1,17 +1,14 @@ package com.ruoyi.common.redis.service; import java.util.Collection; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; import java.util.concurrent.TimeUnit; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.BoundSetOperations; import org.springframework.data.redis.core.HashOperations; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.ValueOperations; import org.springframework.stereotype.Component; import java.util.*; import java.util.concurrent.TimeUnit; /** * spring redis 工具类 @@ -20,8 +17,7 @@ **/ @SuppressWarnings(value = { "unchecked", "rawtypes" }) @Component public class RedisService { public class RedisService { @Autowired public RedisTemplate redisTemplate; @@ -31,8 +27,7 @@ * @param key 缓存的键值 * @param value 缓存的值 */ public <T> void setCacheObject(final String key, final T value) { public <T> void setCacheObject(final String key, final T value) { redisTemplate.opsForValue().set(key, value); } @@ -44,8 +39,7 @@ * @param timeout 时间 * @param timeUnit 时间颗粒度 */ public <T> void setCacheObject(final String key, final T value, final Long timeout, final TimeUnit timeUnit) { public <T> void setCacheObject(final String key, final T value, final Long timeout, final TimeUnit timeUnit) { redisTemplate.opsForValue().set(key, value, timeout, timeUnit); } @@ -56,8 +50,7 @@ * @param timeout 超时时间 * @return true=设置成功;false=设置失败 */ public boolean expire(final String key, final long timeout) { public boolean expire(final String key, final long timeout) { return expire(key, timeout, TimeUnit.SECONDS); } @@ -69,8 +62,7 @@ * @param unit 时间单位 * @return true=设置成功;false=设置失败 */ public boolean expire(final String key, final long timeout, final TimeUnit unit) { public boolean expire(final String key, final long timeout, final TimeUnit unit) { return redisTemplate.expire(key, timeout, unit); } @@ -80,8 +72,7 @@ * @param key Redis键 * @return 有效时间 */ public long getExpire(final String key) { public long getExpire(final String key) { return redisTemplate.getExpire(key); } @@ -91,8 +82,7 @@ * @param key 键 * @return true 存在 false不存在 */ public Boolean hasKey(String key) { public Boolean hasKey(String key) { return redisTemplate.hasKey(key); } @@ -102,8 +92,7 @@ * @param key 缓存键值 * @return 缓存键值对应的数据 */ public <T> T getCacheObject(final String key) { public <T> T getCacheObject(final String key) { ValueOperations<String, T> operation = redisTemplate.opsForValue(); return operation.get(key); } @@ -113,8 +102,7 @@ * * @param key */ public boolean deleteObject(final String key) { public boolean deleteObject(final String key) { return redisTemplate.delete(key); } @@ -124,8 +112,7 @@ * @param collection 多个对象 * @return */ public boolean deleteObject(final Collection collection) { public boolean deleteObject(final Collection collection) { return redisTemplate.delete(collection) > 0; } @@ -136,8 +123,7 @@ * @param dataList 待缓存的List数据 * @return 缓存的对象 */ public <T> long setCacheList(final String key, final List<T> dataList) { public <T> long setCacheList(final String key, final List<T> dataList) { Long count = redisTemplate.opsForList().rightPushAll(key, dataList); return count == null ? 0 : count; } @@ -148,8 +134,7 @@ * @param key 缓存的键值 * @return 缓存键值对应的数据 */ public <T> List<T> getCacheList(final String key) { public <T> List<T> getCacheList(final String key) { return redisTemplate.opsForList().range(key, 0, -1); } @@ -160,12 +145,10 @@ * @param dataSet 缓存的数据 * @return 缓存数据的对象 */ public <T> BoundSetOperations<String, T> setCacheSet(final String key, final Set<T> dataSet) { public <T> BoundSetOperations<String, T> setCacheSet(final String key, final Set<T> dataSet) { BoundSetOperations<String, T> setOperation = redisTemplate.boundSetOps(key); Iterator<T> it = dataSet.iterator(); while (it.hasNext()) { while (it.hasNext()) { setOperation.add(it.next()); } return setOperation; @@ -177,8 +160,7 @@ * @param key * @return */ public <T> Set<T> getCacheSet(final String key) { public <T> Set<T> getCacheSet(final String key) { return redisTemplate.opsForSet().members(key); } @@ -188,8 +170,7 @@ * @param key * @param dataMap */ public <T> void setCacheMap(final String key, final Map<String, T> dataMap) { public <T> void setCacheMap(final String key, final Map<String, T> dataMap) { if (dataMap != null) { redisTemplate.opsForHash().putAll(key, dataMap); } @@ -201,8 +182,7 @@ * @param key * @return */ public <T> Map<String, T> getCacheMap(final String key) { public <T> Map<String, T> getCacheMap(final String key) { return redisTemplate.opsForHash().entries(key); } @@ -213,8 +193,7 @@ * @param hKey Hash键 * @param value 值 */ public <T> void setCacheMapValue(final String key, final String hKey, final T value) { public <T> void setCacheMapValue(final String key, final String hKey, final T value) { redisTemplate.opsForHash().put(key, hKey, value); } @@ -225,8 +204,7 @@ * @param hKey Hash键 * @return Hash中的对象 */ public <T> T getCacheMapValue(final String key, final String hKey) { public <T> T getCacheMapValue(final String key, final String hKey) { HashOperations<String, String, T> opsForHash = redisTemplate.opsForHash(); return opsForHash.get(key, hKey); } @@ -238,8 +216,7 @@ * @param hKeys Hash键集合 * @return Hash对象集合 */ public <T> List<T> getMultiCacheMapValue(final String key, final Collection<Object> hKeys) { public <T> List<T> getMultiCacheMapValue(final String key, final Collection<Object> hKeys) { return redisTemplate.opsForHash().multiGet(key, hKeys); } @@ -250,8 +227,7 @@ * @param hKey Hash键 * @return 是否成功 */ public boolean deleteCacheMapValue(final String key, final String hKey) { public boolean deleteCacheMapValue(final String key, final String hKey) { return redisTemplate.opsForHash().delete(key, hKey) > 0; } @@ -261,8 +237,11 @@ * @param pattern 字符串前缀 * @return 对象列表 */ public Collection<String> keys(final String pattern) { public Collection<String> keys(final String pattern) { return redisTemplate.keys(pattern); } public Set getKeysPrefix(String accessToken) { return redisTemplate.keys(accessToken); } } ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/auth/AuthLogic.java
@@ -1,11 +1,5 @@ package com.ruoyi.common.security.auth; import java.util.Collection; import java.util.HashSet; import java.util.Set; import com.ruoyi.system.api.model.LoginUserParent; import org.springframework.util.PatternMatchUtils; import com.ruoyi.common.core.context.SecurityContextHolder; import com.ruoyi.common.core.exception.auth.NotLoginException; import com.ruoyi.common.core.exception.auth.NotPermissionException; @@ -19,18 +13,27 @@ import com.ruoyi.common.security.service.TokenService; import com.ruoyi.common.security.utils.SecurityUtils; import com.ruoyi.system.api.model.LoginUser; import com.ruoyi.system.api.model.LoginUserParent; import org.springframework.util.PatternMatchUtils; import java.util.Collection; import java.util.HashSet; import java.util.Set; /** * Token 权限验证,逻辑实现类 * * @author ruoyi */ public class AuthLogic { /** 所有权限标识 */ public class AuthLogic { /** * 所有权限标识 */ private static final String ALL_PERMISSION = "*:*:*"; /** 管理员角色权限标识 */ /** * 管理员角色权限标识 */ private static final String SUPER_ADMIN = "admin"; public TokenService tokenService = SpringUtils.getBean(TokenService.class); @@ -38,11 +41,9 @@ /** * 会话注销 */ public void logout() { public void logout() { String token = SecurityUtils.getToken(); if (token == null) { if (token == null) { return; } logoutByToken(token); @@ -51,23 +52,21 @@ /** * 会话注销,根据指定Token */ public void logoutByToken(String token) { public void logoutByToken(String token) { tokenService.delLoginUser(token); } /** * 家长端会话注销,根据指定Token */ public void logoutByToken1(String token) { public void logoutByToken1(String token) { tokenService.delLoginUser1(token); } /** * 检验用户是否已经登录,如未登录,则抛出异常 */ public void checkLogin() { public void checkLogin() { getLoginUser(); } @@ -76,16 +75,13 @@ * * @return 用户缓存信息 */ public LoginUser getLoginUser() { public LoginUser getLoginUser() { String token = SecurityUtils.getToken(); if (token == null) { if (token == null) { throw new NotLoginException("未提供token"); } LoginUser loginUser = SecurityUtils.getLoginUser(); if (loginUser == null) { if (loginUser == null) { throw new NotLoginException("无效的token"); } return loginUser; @@ -97,19 +93,29 @@ * @param token 前端传递的认证信息 * @return 用户缓存信息 */ public LoginUser getLoginUser(String token) { public LoginUser getLoginUser(String token) { return tokenService.getLoginUser(token); } /** * 获取当前用户缓存信息, 如果未登录,则抛出异常 * * @param token 前端传递的认证信息 * @return 用户缓存信息 */ public LoginUserParent getLoginUser1(String token) { public LoginUserParent getLoginUser1(String token) { return tokenService.getLoginUser1(token); } /** * 获取当前用户缓存信息, 如果未登录,则抛出异常 * 学习端 * * @param token 前端传递的认证信息 * @return 用户缓存信息 */ public LoginUserParent getLoginUserStudy(String token) { return tokenService.getLoginUserStudy(token); } /** @@ -117,18 +123,26 @@ * * @param loginUser 当前用户信息 */ public void verifyLoginUserExpire(LoginUser loginUser) { public void verifyLoginUserExpire(LoginUser loginUser) { tokenService.verifyToken(loginUser); } /** * 验证当前用户有效期, 如果相差不足120分钟,自动刷新缓存 * * @param loginUser 当前用户信息 */ public void verifyLoginUserExpire1(LoginUserParent loginUser) { public void verifyLoginUserExpire1(LoginUserParent loginUser) { tokenService.verifyToken1(loginUser); } /** * 验证当前用户有效期, 如果相差不足120分钟,自动刷新缓存 * * @param loginUser 当前用户信息 */ public void verifyLoginUserStudyExpire(LoginUserParent loginUser) { tokenService.verifyTokenStudy(loginUser); } /** @@ -137,8 +151,7 @@ * @param permission 权限字符串 * @return 用户是否具备某权限 */ public boolean hasPermi(String permission) { public boolean hasPermi(String permission) { return hasPermi(getPermiList(), permission); } @@ -148,10 +161,8 @@ * @param permission 权限字符串 * @return 用户是否具备某权限 */ public void checkPermi(String permission) { if (!hasPermi(getPermiList(), permission)) { public void checkPermi(String permission) { if (!hasPermi(getPermiList(), permission)) { throw new NotPermissionException(permission); } } @@ -161,15 +172,11 @@ * * @param requiresPermissions 注解对象 */ public void checkPermi(RequiresPermissions requiresPermissions) { public void checkPermi(RequiresPermissions requiresPermissions) { SecurityContextHolder.setPermission(StringUtils.join(requiresPermissions.value(), ",")); if (requiresPermissions.logical() == Logical.AND) { if (requiresPermissions.logical() == Logical.AND) { checkPermiAnd(requiresPermissions.value()); } else { } else { checkPermiOr(requiresPermissions.value()); } } @@ -179,13 +186,10 @@ * * @param permissions 权限列表 */ public void checkPermiAnd(String... permissions) { public void checkPermiAnd(String... permissions) { Set<String> permissionList = getPermiList(); for (String permission : permissions) { if (!hasPermi(permissionList, permission)) { for (String permission : permissions) { if (!hasPermi(permissionList, permission)) { throw new NotPermissionException(permission); } } @@ -196,18 +200,14 @@ * * @param permissions 权限码数组 */ public void checkPermiOr(String... permissions) { public void checkPermiOr(String... permissions) { Set<String> permissionList = getPermiList(); for (String permission : permissions) { if (hasPermi(permissionList, permission)) { for (String permission : permissions) { if (hasPermi(permissionList, permission)) { return; } } if (permissions.length > 0) { if (permissions.length > 0) { throw new NotPermissionException(permissions); } } @@ -218,8 +218,7 @@ * @param role 角色标识 * @return 用户是否具备某角色 */ public boolean hasRole(String role) { public boolean hasRole(String role) { return hasRole(getRoleList(), role); } @@ -228,10 +227,8 @@ * * @param role 角色标识 */ public void checkRole(String role) { if (!hasRole(role)) { public void checkRole(String role) { if (!hasRole(role)) { throw new NotRoleException(role); } } @@ -241,14 +238,10 @@ * * @param requiresRoles 注解对象 */ public void checkRole(RequiresRoles requiresRoles) { if (requiresRoles.logical() == Logical.AND) { public void checkRole(RequiresRoles requiresRoles) { if (requiresRoles.logical() == Logical.AND) { checkRoleAnd(requiresRoles.value()); } else { } else { checkRoleOr(requiresRoles.value()); } } @@ -258,13 +251,10 @@ * * @param roles 角色标识数组 */ public void checkRoleAnd(String... roles) { public void checkRoleAnd(String... roles) { Set<String> roleList = getRoleList(); for (String role : roles) { if (!hasRole(roleList, role)) { for (String role : roles) { if (!hasRole(roleList, role)) { throw new NotRoleException(role); } } @@ -275,18 +265,14 @@ * * @param roles 角色标识数组 */ public void checkRoleOr(String... roles) { public void checkRoleOr(String... roles) { Set<String> roleList = getRoleList(); for (String role : roles) { if (hasRole(roleList, role)) { for (String role : roles) { if (hasRole(roleList, role)) { return; } } if (roles.length > 0) { if (roles.length > 0) { throw new NotRoleException(roles); } } @@ -296,8 +282,7 @@ * * @param at 注解对象 */ public void checkByAnnotation(RequiresLogin at) { public void checkByAnnotation(RequiresLogin at) { this.checkLogin(); } @@ -306,15 +291,11 @@ * * @param at 注解对象 */ public void checkByAnnotation(RequiresRoles at) { public void checkByAnnotation(RequiresRoles at) { String[] roleArray = at.value(); if (at.logical() == Logical.AND) { if (at.logical() == Logical.AND) { this.checkRoleAnd(roleArray); } else { } else { this.checkRoleOr(roleArray); } } @@ -324,15 +305,11 @@ * * @param at 注解对象 */ public void checkByAnnotation(RequiresPermissions at) { public void checkByAnnotation(RequiresPermissions at) { String[] permissionArray = at.value(); if (at.logical() == Logical.AND) { if (at.logical() == Logical.AND) { this.checkPermiAnd(permissionArray); } else { } else { this.checkPermiOr(permissionArray); } } @@ -342,15 +319,11 @@ * * @return 角色列表 */ public Set<String> getRoleList() { try { public Set<String> getRoleList() { try { LoginUser loginUser = getLoginUser(); return loginUser.getRoles(); } catch (Exception e) { } catch (Exception e) { return new HashSet<>(); } } @@ -360,15 +333,11 @@ * * @return 权限列表 */ public Set<String> getPermiList() { try { public Set<String> getPermiList() { try { LoginUser loginUser = getLoginUser(); return loginUser.getPermissions(); } catch (Exception e) { } catch (Exception e) { return new HashSet<>(); } } @@ -380,8 +349,7 @@ * @param permission 权限字符串 * @return 用户是否具备某权限 */ public boolean hasPermi(Collection<String> authorities, String permission) { public boolean hasPermi(Collection<String> authorities, String permission) { return authorities.stream().filter(StringUtils::hasText) .anyMatch(x -> ALL_PERMISSION.contains(x) || PatternMatchUtils.simpleMatch(x, permission)); } @@ -393,8 +361,7 @@ * @param role 角色 * @return 用户是否具备某角色权限 */ public boolean hasRole(Collection<String> roles, String role) { public boolean hasRole(Collection<String> roles, String role) { return roles.stream().filter(StringUtils::hasText) .anyMatch(x -> SUPER_ADMIN.contains(x) || PatternMatchUtils.simpleMatch(x, role)); } ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/auth/AuthUtil.java
@@ -10,8 +10,7 @@ * * @author ruoyi */ public class AuthUtil { public class AuthUtil { /** * 底层的 AuthLogic 对象 */ @@ -20,8 +19,7 @@ /** * 会话注销 */ public static void logout() { public static void logout() { authLogic.logout(); } @@ -30,25 +28,23 @@ * * @param token 指定token */ public static void logoutByToken(String token) { public static void logoutByToken(String token) { authLogic.logoutByToken(token); } /** * 家长端会话注销,根据指定Token * * @param token 指定token */ public static void logoutByToken1(String token) { public static void logoutByToken1(String token) { authLogic.logoutByToken1(token); } /** * 检验当前会话是否已经登录,如未登录,则抛出异常 */ public static void checkLogin() { public static void checkLogin() { authLogic.checkLogin(); } @@ -58,19 +54,28 @@ * @param token 指定token * @return 用户信息 */ public static LoginUser getLoginUser(String token) { public static LoginUser getLoginUser(String token) { return authLogic.getLoginUser(token); } /** * 获取当前登录用户信息 * * @param token 指定token * @return 用户信息 */ public static LoginUserParent getLoginUser1(String token) { public static LoginUserParent getLoginUser1(String token) { return authLogic.getLoginUser1(token); } /** * 获取当前登录用户信息-学习端 * * @param token 指定token * @return 用户信息 */ public static LoginUserParent getLoginUserStudy(String token) { return authLogic.getLoginUserStudy(token); } /** @@ -78,18 +83,26 @@ * * @param loginUser 用户信息 */ public static void verifyLoginUserExpire(LoginUser loginUser) { public static void verifyLoginUserExpire(LoginUser loginUser) { authLogic.verifyLoginUserExpire(loginUser); } /** * 验证当前用户有效期 * * @param loginUser 用户信息 */ public static void verifyLoginUserExpire1(LoginUserParent loginUser) { public static void verifyLoginUserExpire1(LoginUserParent loginUser) { authLogic.verifyLoginUserExpire1(loginUser); } /** * 验证当前用户有效期 -学习端 * * @param loginUser 用户信息 */ public static void verifyLoginUserStudyExpire(LoginUserParent loginUser) { authLogic.verifyLoginUserStudyExpire(loginUser); } /** @@ -98,8 +111,7 @@ * @param role 角色标识 * @return 是否含有指定角色标识 */ public static boolean hasRole(String role) { public static boolean hasRole(String role) { return authLogic.hasRole(role); } @@ -108,8 +120,7 @@ * * @param role 角色标识 */ public static void checkRole(String role) { public static void checkRole(String role) { authLogic.checkRole(role); } @@ -118,8 +129,7 @@ * * @param requiresRoles 角色权限注解 */ public static void checkRole(RequiresRoles requiresRoles) { public static void checkRole(RequiresRoles requiresRoles) { authLogic.checkRole(requiresRoles); } @@ -128,8 +138,7 @@ * * @param roles 角色标识数组 */ public static void checkRoleAnd(String... roles) { public static void checkRoleAnd(String... roles) { authLogic.checkRoleAnd(roles); } @@ -138,8 +147,7 @@ * * @param roles 角色标识数组 */ public static void checkRoleOr(String... roles) { public static void checkRoleOr(String... roles) { authLogic.checkRoleOr(roles); } @@ -149,8 +157,7 @@ * @param permission 权限码 * @return 是否含有指定权限 */ public static boolean hasPermi(String permission) { public static boolean hasPermi(String permission) { return authLogic.hasPermi(permission); } @@ -159,8 +166,7 @@ * * @param permission 权限码 */ public static void checkPermi(String permission) { public static void checkPermi(String permission) { authLogic.checkPermi(permission); } @@ -169,8 +175,7 @@ * * @param requiresPermissions 权限注解 */ public static void checkPermi(RequiresPermissions requiresPermissions) { public static void checkPermi(RequiresPermissions requiresPermissions) { authLogic.checkPermi(requiresPermissions); } @@ -179,8 +184,7 @@ * * @param permissions 权限码数组 */ public static void checkPermiAnd(String... permissions) { public static void checkPermiAnd(String... permissions) { authLogic.checkPermiAnd(permissions); } @@ -189,8 +193,7 @@ * * @param permissions 权限码数组 */ public static void checkPermiOr(String... permissions) { public static void checkPermiOr(String... permissions) { authLogic.checkPermiOr(permissions); } } ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/interceptor/HeaderInterceptor.java
@@ -1,11 +1,5 @@ package com.ruoyi.common.security.interceptor; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.ruoyi.system.api.model.LoginUserParent; import org.springframework.web.method.HandlerMethod; import org.springframework.web.servlet.AsyncHandlerInterceptor; import com.ruoyi.common.core.constant.SecurityConstants; import com.ruoyi.common.core.context.SecurityContextHolder; import com.ruoyi.common.core.utils.ServletUtils; @@ -13,6 +7,12 @@ import com.ruoyi.common.security.auth.AuthUtil; import com.ruoyi.common.security.utils.SecurityUtils; import com.ruoyi.system.api.model.LoginUser; import com.ruoyi.system.api.model.LoginUserParent; import org.springframework.web.method.HandlerMethod; import org.springframework.web.servlet.AsyncHandlerInterceptor; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * 自定义请求头拦截器,将Header数据封装到线程变量中方便获取 @@ -20,13 +20,10 @@ * * @author ruoyi */ public class HeaderInterceptor implements AsyncHandlerInterceptor { public class HeaderInterceptor implements AsyncHandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { if (!(handler instanceof HandlerMethod)) { public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { if (!(handler instanceof HandlerMethod)) { return true; } @@ -35,28 +32,31 @@ SecurityContextHolder.setUserKey(ServletUtils.getHeader(request, SecurityConstants.USER_KEY)); String token = SecurityUtils.getToken(); if (StringUtils.isNotEmpty(token)) { if (StringUtils.isNotEmpty(token)) { LoginUser loginUser = AuthUtil.getLoginUser(token); if (StringUtils.isNotNull(loginUser)) { if (StringUtils.isNotNull(loginUser)) { AuthUtil.verifyLoginUserExpire(loginUser); SecurityContextHolder.set(SecurityConstants.LOGIN_USER, loginUser); } LoginUserParent loginUser1 = AuthUtil.getLoginUser1(token); if (StringUtils.isNotNull(loginUser1)) { if (StringUtils.isNotNull(loginUser1)) { AuthUtil.verifyLoginUserExpire1(loginUser1); SecurityContextHolder.set(SecurityConstants.LOGIN_USER, loginUser); } // LoginUserParent loginUserStudy = AuthUtil.getLoginUserStudy(token); // if (StringUtils.isNotNull(loginUserStudy)) { // AuthUtil.verifyLoginUserStudyExpire(loginUserStudy); // SecurityContextHolder.set(SecurityConstants.USER_STUDY_KEY, loginUserStudy); // } else { // return false; // } } return true; } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { throws Exception { SecurityContextHolder.remove(); } } ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/service/TokenService.java
@@ -1,7 +1,9 @@ package com.ruoyi.common.security.service; import com.alibaba.fastjson2.JSONObject; import com.ruoyi.common.core.constant.CacheConstants; import com.ruoyi.common.core.constant.SecurityConstants; import com.ruoyi.common.core.exception.GlobalException; import com.ruoyi.common.core.utils.JwtUtils; import com.ruoyi.common.core.utils.ServletUtils; import com.ruoyi.common.core.utils.StringUtils; @@ -17,6 +19,7 @@ import javax.servlet.http.HttpServletRequest; import java.util.HashMap; import java.util.Map; import java.util.Set; import java.util.concurrent.TimeUnit; /** @@ -25,8 +28,7 @@ * @author ruoyi */ @Component public class TokenService { public class TokenService { @Autowired private RedisService redisService; @@ -43,8 +45,7 @@ /** * 创建令牌 */ public Map<String, Object> createToken(LoginUser loginUser) { public Map<String, Object> createToken(LoginUser loginUser) { String token = IdUtils.fastUUID(); Long userId = loginUser.getSysUser().getUserId(); String userName = loginUser.getSysUser().getUserName(); @@ -66,8 +67,8 @@ rspMap.put("expires_in", expireTime); return rspMap; } public Map<String, Object> createToken1(LoginUserParent loginUser) { public Map<String, Object> createToken1(LoginUserParent loginUser) { String token = IdUtils.fastUUID(); Integer userId = loginUser.getUserid(); String name = loginUser.getName(); @@ -86,8 +87,7 @@ return rspMap; } public Map<String, Object> createTokenStudy(LoginUserParent loginUser) { public Map<String, Object> createTokenStudy(LoginUserParent loginUser) { String token = IdUtils.fastUUID(); Integer userId = loginUser.getUserid(); String name = loginUser.getName(); @@ -111,8 +111,7 @@ * * @return 用户信息 */ public LoginUser getLoginUser() { public LoginUser getLoginUser() { return getLoginUser(ServletUtils.getRequest()); } @@ -121,19 +120,18 @@ * * @return 用户信息 */ public LoginUser getLoginUser(HttpServletRequest request) { public LoginUser getLoginUser(HttpServletRequest request) { // 获取请求携带的令牌 String token = SecurityUtils.getToken(request); return getLoginUser(token); } /** * 家长端/学习端获取用户身份信息 * * @return 用户信息 */ public LoginUserParent getLoginUser1() { public LoginUserParent getLoginUser1() { return getLoginUser1(ServletUtils.getRequest()); } @@ -142,9 +140,12 @@ * * @return 用户信息 */ public LoginUserParent getLoginUserStudy() { return getLoginUserStudy(ServletUtils.getRequest()); public LoginUserParent getLoginUserStudy() { LoginUserParent userStudy = getLoginUserStudy(ServletUtils.getRequest()); if (null == userStudy) { throw new GlobalException("登录失效,请重新登录!"); } return userStudy; } /** @@ -152,8 +153,7 @@ * * @return 用户信息 */ public LoginUserParent getLoginUser1(HttpServletRequest request) { public LoginUserParent getLoginUser1(HttpServletRequest request) { // 获取请求携带的令牌 String token = SecurityUtils.getToken(request); return getLoginUser1(token); @@ -164,8 +164,7 @@ * * @return 用户信息 */ public LoginUserParent getLoginUserStudy(HttpServletRequest request) { public LoginUserParent getLoginUserStudy(HttpServletRequest request) { // 获取请求携带的令牌 String token = SecurityUtils.getToken(request); return getLoginUserStudy(token); @@ -176,42 +175,33 @@ * * @return 用户信息 */ public LoginUser getLoginUser(String token) { public LoginUser getLoginUser(String token) { LoginUser user = null; try { if (StringUtils.isNotEmpty(token)) { try { if (StringUtils.isNotEmpty(token)) { String userkey = JwtUtils.getUserKey(token); user = redisService.getCacheObject(getTokenKey(userkey)); return user; } } catch (Exception e) { } catch (Exception e) { } return user; } /** * 家长端 学习端 获取用户身份信息 * * @return 用户信息 */ public LoginUserParent getLoginUser1(String token) { public LoginUserParent getLoginUser1(String token) { LoginUserParent user = null; try { if (StringUtils.isNotEmpty(token)) { try { if (StringUtils.isNotEmpty(token)) { String userkey = JwtUtils.getUserKey1(token); user = redisService.getCacheObject(getTokenKey(userkey)); return user; } } catch (Exception e) { } catch (Exception e) { e.printStackTrace(); } return user; @@ -222,20 +212,15 @@ * * @return 用户信息 */ public LoginUserParent getLoginUserStudy(String token) { public LoginUserParent getLoginUserStudy(String token) { LoginUserParent user = null; try { if (StringUtils.isNotEmpty(token)) { try { if (StringUtils.isNotEmpty(token)) { String userkey = JwtUtils.getUserKeyStudy(token); user = redisService.getCacheObject(getTokenKey(userkey)); return user; } } catch (Exception e) { } catch (Exception e) { e.printStackTrace(); } return user; @@ -244,10 +229,8 @@ /** * 设置用户身份信息 */ public void setLoginUser(LoginUser loginUser) { if (StringUtils.isNotNull(loginUser) && StringUtils.isNotEmpty(loginUser.getToken())) { public void setLoginUser(LoginUser loginUser) { if (StringUtils.isNotNull(loginUser) && StringUtils.isNotEmpty(loginUser.getToken())) { refreshToken(loginUser); } } @@ -255,21 +238,18 @@ /** * 删除用户缓存信息 */ public void delLoginUser(String token) { if (StringUtils.isNotEmpty(token)) { public void delLoginUser(String token) { if (StringUtils.isNotEmpty(token)) { String userkey = JwtUtils.getUserKey(token); redisService.deleteObject(getTokenKey(userkey)); } } /** * 家长端删除用户缓存信息 */ public void delLoginUser1(String token) { if (StringUtils.isNotEmpty(token)) { public void delLoginUser1(String token) { if (StringUtils.isNotEmpty(token)) { String userkey = JwtUtils.getUserKey1(token); redisService.deleteObject(getTokenKey(userkey)); } @@ -280,27 +260,35 @@ * * @param loginUser */ public void verifyToken(LoginUser loginUser) { public void verifyToken(LoginUser loginUser) { long expireTime = loginUser.getExpireTime(); long currentTime = System.currentTimeMillis(); if (expireTime - currentTime <= MILLIS_MINUTE_TEN) { if (expireTime - currentTime <= MILLIS_MINUTE_TEN) { refreshToken(loginUser); } } /** * 验证令牌有效期,相差不足120分钟,自动刷新缓存 * * @param loginUser */ public void verifyToken1(LoginUserParent loginUser) { public void verifyToken1(LoginUserParent loginUser) { long expireTime = loginUser.getExpireTime(); long currentTime = System.currentTimeMillis(); if (expireTime - currentTime <= MILLIS_MINUTE_TEN) { if (expireTime - currentTime <= MILLIS_MINUTE_TEN) { refreshToken1(loginUser); } } /** * 验证令牌有效期,相差不足120分钟,自动刷新缓存 */ public void verifyTokenStudy(LoginUserParent loginUser) { long expireTime = loginUser.getExpireTime(); long currentTime = System.currentTimeMillis(); if (expireTime - currentTime <= MILLIS_MINUTE_TEN) { refreshTokenStudy(loginUser); } } @@ -309,8 +297,7 @@ * * @param loginUser 登录信息 */ public void refreshToken(LoginUser loginUser) { public void refreshToken(LoginUser loginUser) { loginUser.setLoginTime(System.currentTimeMillis()); loginUser.setExpireTime(loginUser.getLoginTime() + expireTime * MILLIS_MINUTE); // 根据uuid将loginUser缓存 @@ -321,8 +308,7 @@ /** * 家长端用户登录 */ public void refreshToken1(LoginUserParent dto) { public void refreshToken1(LoginUserParent dto) { dto.setLoginTime(System.currentTimeMillis()); dto.setExpireTime(dto.getLoginTime() + expireTime * MILLIS_MINUTE); // 根据uuid将loginUser缓存 @@ -333,8 +319,20 @@ /** * 学习端用户登录 */ public void refreshTokenStudy(LoginUserParent dto) { public void refreshTokenStudy(LoginUserParent dto) { // 获取所有 login_tokens: 前缀的登录缓存 Set redisCache = redisService.getKeysPrefix(ACCESS_TOKEN + "*"); for (Object key : redisCache) { String strKey = String.valueOf(key); // 根据 login_tokens:加密token 获取用户登录信息 Object redisCacheUserInfo = redisService.getCacheObject(strKey); LoginUserParent redisUserInfo = JSONObject.parseObject(JSONObject.toJSONString(redisCacheUserInfo), LoginUserParent.class); // 单点逻辑 if (dto.getPhone().equals(redisUserInfo.getPhone())) { redisService.deleteObject(strKey); } } // 单点登录逻辑 dto.setLoginTime(System.currentTimeMillis()); dto.setExpireTime(dto.getLoginTime() + expireTime * MILLIS_MINUTE); // 根据uuid将loginUser缓存 @@ -342,8 +340,7 @@ redisService.setCacheObject(userKey, dto, expireTime, TimeUnit.MINUTES); } private String getTokenKey(String token) { private String getTokenKey(String token) { return ACCESS_TOKEN + token; } }