| | |
| | | Partner partner = partnerClient.getPartnerById(userInfo.getSysUser().getObjectId()).getData(); |
| | | map.put("partnerName", partner.getName()); |
| | | } |
| | | long time = userInfo.getSysUser().getPassWordUpdate().getTime(); |
| | | map.put("password", false); |
| | | //30天提示修改密码 |
| | | if(System.currentTimeMillis() >= (time + 2592000000L)){ |
| | | map.put("password", true); |
| | | } |
| | | // 修改用户最后登录时间 |
| | | SysUser sysUser = new SysUser(); |
| | | sysUser.setUserId(userInfo.getSysUser().getUserId()); |
| | |
| | | claimsMap.put(SecurityConstants.USER_TYPE, "system"); |
| | | claimsMap.put(SecurityConstants.DETAILS_USERNAME, userName); |
| | | |
| | | String token1 = JwtUtils.createToken(claimsMap); |
| | | String userKey = getUserKey(loginUser.getUserid()); |
| | | redisService.setCacheObject(userKey, token1, expireTime, TimeUnit.MINUTES); |
| | | // 接口返回信息 |
| | | Map<String, Object> rspMap = new HashMap<String, Object>(); |
| | | rspMap.put("access_token", JwtUtils.createToken(claimsMap)); |
| | | rspMap.put("access_token", token1); |
| | | rspMap.put("expires_in", expireTime); |
| | | return rspMap; |
| | | } |
| | |
| | | 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); |
| | | String tokenKey = getTokenKey(loginUser.getToken()); |
| | | redisService.setCacheObject(tokenKey, loginUser, expireTime, TimeUnit.MINUTES); |
| | | } |
| | | |
| | | public void refreshToken1(LoginUserApplet dto) { |
| | |
| | | private String getTokenKey(String token) { |
| | | return ACCESS_TOKEN + token; |
| | | } |
| | | |
| | | private String getUserKey(Long userid) { |
| | | return ACCESS_TOKEN + userid; |
| | | } |
| | | } |
| | |
| | | import io.jsonwebtoken.Claims; |
| | | import reactor.core.publisher.Mono; |
| | | |
| | | import java.time.LocalDateTime; |
| | | import java.util.HashMap; |
| | | import java.util.Map; |
| | | |
| | |
| | | addHeader(mutate, SecurityConstants.DETAILS_USER_ID, userid); |
| | | addHeader(mutate, SecurityConstants.DETAILS_USERNAME, username); |
| | | addHeader(mutate, SecurityConstants.USER_TYPE, userType); |
| | | //管理后台记录用户最后一次的操作时间,用于判定30分钟无操作后删除token,退出登录 |
| | | if("system".equals(userType)){ |
| | | addLastTime(userid, url); |
| | | } |
| | | // 内部请求来源参数清除 |
| | | removeHeader(mutate, SecurityConstants.FROM_SOURCE); |
| | | return chain.filter(exchange.mutate().request(mutate.build()).build()); |
| | |
| | | return ServletUtils.webFluxResponseWriter(exchange.getResponse(), msg, HttpStatus.UNAUTHORIZED); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 记录用户最后一次操作的时间 |
| | | * @param userid |
| | | * @param url |
| | | */ |
| | | private void addLastTime(String userid, String url){ |
| | | Object lastTime = redisService.getCacheObject("lastTime:" + userid); |
| | | if(null == lastTime){ |
| | | redisService.setCacheObject("lastTime:" + userid, System.currentTimeMillis()); |
| | | }else{ |
| | | Long last = Long.valueOf(lastTime.toString()); |
| | | //操作登录或者时间差值小于30分钟,写入新的数据到缓存中 |
| | | if("/auth/login".equals(url) || System.currentTimeMillis() - last < 1800000L){ |
| | | redisService.setCacheObject("lastTime:" + userid, System.currentTimeMillis()); |
| | | } |
| | | } |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 获取缓存key |
| | | */ |
| | |
| | | import com.ruoyi.common.security.annotation.EnableRyFeignClients; |
| | | import com.ruoyi.common.swagger.annotation.EnableCustomSwagger2; |
| | | import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; |
| | | import org.springframework.scheduling.annotation.EnableScheduling; |
| | | import org.springframework.transaction.annotation.EnableTransactionManagement; |
| | | |
| | | /** |
| | |
| | | @MapperScan({"com.ruoyi.system.mapper"}) |
| | | @EnableCustomSwagger2 |
| | | @EnableRyFeignClients |
| | | @EnableScheduling//开启定时任务 |
| | | @SpringBootApplication |
| | | @EnableTransactionManagement |
| | | public class RuoYiSystemApplication |
| | |
| | | user.setCreateBy(SecurityUtils.getUsername()); |
| | | user.setPassword(SecurityUtils.encryptPassword(user.getPassword())); |
| | | user.setRoleType(1); |
| | | user.setPassWordUpdate(new Date()); |
| | | userService.insertUser(user); |
| | | SysUserRole sysUserRole = new SysUserRole(); |
| | | sysUserRole.setRoleId(user.getRoleId()); |
| | |
| | | sysUserVo.setSysUser(sysUser); |
| | | sysUserVo.setRoles(roles); |
| | | sysUserVo.setPermissions(permissions); |
| | | |
| | | return R.ok(sysUserVo); |
| | | } |
| | | |
New file |
| | |
| | | package com.ruoyi.system.util; |
| | | |
| | | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
| | | import com.ruoyi.common.core.utils.JwtUtils; |
| | | import com.ruoyi.common.redis.service.RedisService; |
| | | import com.ruoyi.common.security.auth.AuthUtil; |
| | | import com.ruoyi.system.api.domain.SysUser; |
| | | import com.ruoyi.system.service.ISysUserService; |
| | | import org.springframework.scheduling.annotation.Scheduled; |
| | | import org.springframework.stereotype.Component; |
| | | |
| | | import javax.annotation.Resource; |
| | | import java.util.List; |
| | | |
| | | |
| | | /** |
| | | * @author zhibing.pu |
| | | * @date 2023/7/11 8:39 |
| | | */ |
| | | @Component |
| | | public class TaskUtil { |
| | | |
| | | @Resource |
| | | private ISysUserService sysUserService; |
| | | |
| | | @Resource |
| | | private RedisService redisService; |
| | | |
| | | |
| | | /** |
| | | * 每分钟检测后台用户是否有30分钟未进行操作 |
| | | */ |
| | | @Scheduled(fixedRate = 60000) |
| | | public void taskLogout() { |
| | | List<SysUser> list = sysUserService.list(new LambdaQueryWrapper<SysUser>().eq(SysUser::getDelFlag, "0").eq(SysUser::getStatus, "0")); |
| | | for (SysUser sysUser : list) { |
| | | Object lastTime = redisService.getCacheObject("lastTime:" + sysUser.getUserId()); |
| | | if(null == lastTime){ |
| | | Object cacheObject = redisService.getCacheObject("login_tokens:" + sysUser.getUserId()); |
| | | if(null != cacheObject){ |
| | | String token = cacheObject.toString(); |
| | | // 删除用户缓存记录 |
| | | AuthUtil.logoutByToken(token); |
| | | } |
| | | }else{ |
| | | Long last = Long.valueOf(lastTime.toString()); |
| | | //操作登录或者时间差值小于30分钟,写入新的数据到缓存中 |
| | | if(System.currentTimeMillis() - last >= 1800000L){ |
| | | Object cacheObject = redisService.getCacheObject("login_tokens:" + sysUser.getUserId()); |
| | | if(null != cacheObject){ |
| | | String token = cacheObject.toString(); |
| | | // 删除用户缓存记录 |
| | | AuthUtil.logoutByToken(token); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | } |