diff --git a/src/main/java/com/ruoyi/common/utils/SystemLogUtils.java b/src/main/java/com/ruoyi/common/utils/SystemLogUtils.java deleted file mode 100644 index 86e2e77c3..000000000 --- a/src/main/java/com/ruoyi/common/utils/SystemLogUtils.java +++ /dev/null @@ -1,69 +0,0 @@ -package com.ruoyi.common.utils; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import com.ruoyi.common.constant.Constants; -import com.ruoyi.common.utils.security.ShiroUtils; -import com.ruoyi.common.utils.spring.SpringUtils; -import com.ruoyi.project.monitor.logininfor.domain.Logininfor; -import com.ruoyi.project.monitor.logininfor.service.LogininforServiceImpl; - -import eu.bitwalker.useragentutils.UserAgent; - -/** - * 记录用户日志信息 - * - * @author ruoyi - */ -@Deprecated // 加入异步功能之后,该类已无意义 -public class SystemLogUtils { - - private static final Logger sys_user_logger = LoggerFactory.getLogger("sys-user"); - - /** - * 记录格式 [ip][用户名][操作][错误消息] - *

- * 注意操作如下: loginError 登录失败 loginSuccess 登录成功 passwordError 密码错误 - * changePassword 修改密码 changeStatus 修改状态 - * - * @param username - * @param op - * @param msg - * @param args - */ - public static void log(String username, String status, String msg, Object... args) { - StringBuilder s = new StringBuilder(); - s.append(LogUtils.getBlock(ShiroUtils.getIp())); - s.append(AddressUtils.getRealAddressByIP(ShiroUtils.getIp())); - s.append(LogUtils.getBlock(username)); - s.append(LogUtils.getBlock(status)); - s.append(LogUtils.getBlock(msg)); - - sys_user_logger.info(s.toString(), args); - - if (Constants.LOGIN_SUCCESS.equals(status) || Constants.LOGOUT.equals(status)) { - saveOpLog(username, msg, Constants.SUCCESS); - } else if (Constants.LOGIN_FAIL.equals(status)) { - saveOpLog(username, msg, Constants.FAIL); - } - } - - public static void saveOpLog(String username, String message, String status) { - UserAgent userAgent = UserAgent.parseUserAgentString(ServletUtils.getRequest().getHeader("User-Agent")); - // 获取客户端操作系统 - String os = userAgent.getOperatingSystem().getName(); - // 获取客户端浏览器 - String browser = userAgent.getBrowser().getName(); - LogininforServiceImpl logininforService = SpringUtils.getBean(LogininforServiceImpl.class); - Logininfor logininfor = new Logininfor(); - logininfor.setLoginName(username); - logininfor.setStatus(status); - logininfor.setIpaddr(ShiroUtils.getIp()); - logininfor.setLoginLocation(AddressUtils.getRealAddressByIP(ShiroUtils.getIp())); - logininfor.setBrowser(browser); - logininfor.setOs(os); - logininfor.setMsg(message); - logininforService.insertLogininfor(logininfor); - } -} diff --git a/src/main/java/com/ruoyi/framework/aspectj/LogAspect.java b/src/main/java/com/ruoyi/framework/aspectj/LogAspect.java index 6ce675e88..fa0aa80a9 100644 --- a/src/main/java/com/ruoyi/framework/aspectj/LogAspect.java +++ b/src/main/java/com/ruoyi/framework/aspectj/LogAspect.java @@ -2,7 +2,6 @@ package com.ruoyi.framework.aspectj; import java.lang.reflect.Method; import java.util.Map; - import org.aspectj.lang.JoinPoint; import org.aspectj.lang.Signature; import org.aspectj.lang.annotation.AfterReturning; @@ -15,7 +14,6 @@ import org.slf4j.LoggerFactory; import org.springframework.scheduling.annotation.Async; import org.springframework.scheduling.annotation.EnableAsync; import org.springframework.stereotype.Component; - import com.alibaba.fastjson.JSONObject; import com.ruoyi.common.utils.ServletUtils; import com.ruoyi.common.utils.StringUtils; @@ -35,128 +33,144 @@ import com.ruoyi.project.system.user.domain.User; @Aspect @Component @EnableAsync -public class LogAspect { - private static final Logger log = LoggerFactory.getLogger(LogAspect.class); +public class LogAspect +{ + private static final Logger log = LoggerFactory.getLogger(LogAspect.class); - // 配置织入点 - @Pointcut("@annotation(com.ruoyi.framework.aspectj.lang.annotation.Log)") - public void logPointCut() { - } + // 配置织入点 + @Pointcut("@annotation(com.ruoyi.framework.aspectj.lang.annotation.Log)") + public void logPointCut() + { + } - /** - * 前置通知 用于拦截操作 - * - * @param joinPoint - * 切点 - */ - @AfterReturning(pointcut = "logPointCut()") - public void doBefore(JoinPoint joinPoint) { - handleLog(joinPoint, null); - } + /** + * 前置通知 用于拦截操作 + * + * @param joinPoint 切点 + */ + @AfterReturning(pointcut = "logPointCut()") + public void doBefore(JoinPoint joinPoint) + { + handleLog(joinPoint, null); + } - /** - * 拦截异常操作 - * - * @param joinPoint - * @param e - */ - @AfterThrowing(value = "logPointCut()", throwing = "e") - public void doAfter(JoinPoint joinPoint, Exception e) { - handleLog(joinPoint, e); - } + /** + * 拦截异常操作 + * + * @param joinPoint + * @param e + */ + @AfterThrowing(value = "logPointCut()", throwing = "e") + public void doAfter(JoinPoint joinPoint, Exception e) + { + handleLog(joinPoint, e); + } - @Async - protected void handleLog(final JoinPoint joinPoint, final Exception e) { - try { - // 获得注解 - Log controllerLog = getAnnotationLog(joinPoint); - if (controllerLog == null) { - return; - } + @Async + protected void handleLog(final JoinPoint joinPoint, final Exception e) + { + try + { + // 获得注解 + Log controllerLog = getAnnotationLog(joinPoint); + if (controllerLog == null) + { + return; + } - // 获取当前的用户 - User currentUser = ShiroUtils.getUser(); + // 获取当前的用户 + User currentUser = ShiroUtils.getUser(); - // *========数据库日志=========*// - OperLog operLog = new OperLog(); - operLog.setStatus(BusinessStatus.SUCCESS); - // 请求的地址 - String ip = ShiroUtils.getIp(); - operLog.setOperIp(ip); + // *========数据库日志=========*// + OperLog operLog = new OperLog(); + operLog.setStatus(BusinessStatus.SUCCESS); + // 请求的地址 + String ip = ShiroUtils.getIp(); + operLog.setOperIp(ip); - operLog.setOperUrl(ServletUtils.getRequest().getRequestURI()); - if (currentUser != null) { - operLog.setOperName(currentUser.getLoginName()); - if (StringUtils.isNotNull(currentUser.getDept()) && StringUtils.isNotEmpty(currentUser.getDept().getDeptName())) { - operLog.setDeptName(currentUser.getDept().getDeptName()); - } - } + operLog.setOperUrl(ServletUtils.getRequest().getRequestURI()); + if (currentUser != null) + { + operLog.setOperName(currentUser.getLoginName()); + if (StringUtils.isNotNull(currentUser.getDept()) + && StringUtils.isNotEmpty(currentUser.getDept().getDeptName())) + { + operLog.setDeptName(currentUser.getDept().getDeptName()); + } + } - if (e != null) { - operLog.setStatus(BusinessStatus.FAIL); - operLog.setErrorMsg(StringUtils.substring(e.getMessage(), 0, 2000)); - } - // 设置方法名称 - String className = joinPoint.getTarget().getClass().getName(); - String methodName = joinPoint.getSignature().getName(); - operLog.setMethod(className + "." + methodName + "()"); - // 处理设置注解上的参数 - getControllerMethodDescription(controllerLog, operLog); - // 保存数据库 - AsyncManager.me().execute(AsyncFactory.recordOper(operLog)); - } catch (Exception exp) { - // 记录本地异常日志 - log.error("==前置通知异常=="); - log.error("异常信息:{}", exp.getMessage()); - exp.printStackTrace(); - } - } + if (e != null) + { + operLog.setStatus(BusinessStatus.FAIL); + operLog.setErrorMsg(StringUtils.substring(e.getMessage(), 0, 2000)); + } + // 设置方法名称 + String className = joinPoint.getTarget().getClass().getName(); + String methodName = joinPoint.getSignature().getName(); + operLog.setMethod(className + "." + methodName + "()"); + // 处理设置注解上的参数 + getControllerMethodDescription(controllerLog, operLog); + // 保存数据库 + AsyncManager.me().execute(AsyncFactory.recordOper(operLog)); + } + catch (Exception exp) + { + // 记录本地异常日志 + log.error("==前置通知异常=="); + log.error("异常信息:{}", exp.getMessage()); + exp.printStackTrace(); + } + } - /** - * 获取注解中对方法的描述信息 用于Controller层注解 - * - * @param joinPoint - * 切点 - * @return 方法描述 - * @throws Exception - */ - public void getControllerMethodDescription(Log log, OperLog operLog) throws Exception { - // 设置action动作 - operLog.setAction(log.action()); - // 设置标题 - operLog.setTitle(log.title()); - // 设置channel - operLog.setChannel(log.channel()); - // 是否需要保存request,参数和值 - if (log.isSaveRequestData()) { - // 获取参数的信息,传入到数据库中。 - setRequestValue(operLog); - } - } + /** + * 获取注解中对方法的描述信息 用于Controller层注解 + * + * @param joinPoint 切点 + * @return 方法描述 + * @throws Exception + */ + public void getControllerMethodDescription(Log log, OperLog operLog) throws Exception + { + // 设置action动作 + operLog.setAction(log.action()); + // 设置标题 + operLog.setTitle(log.title()); + // 设置channel + operLog.setChannel(log.channel()); + // 是否需要保存request,参数和值 + if (log.isSaveRequestData()) + { + // 获取参数的信息,传入到数据库中。 + setRequestValue(operLog); + } + } - /** - * 获取请求的参数,放到log中 - * - * @param operLog - * @param request - */ - private void setRequestValue(OperLog operLog) { - Map map = ServletUtils.getRequest().getParameterMap(); - String params = JSONObject.toJSONString(map); - operLog.setOperParam(StringUtils.substring(params, 0, 255)); - } + /** + * 获取请求的参数,放到log中 + * + * @param operLog + * @param request + */ + private void setRequestValue(OperLog operLog) + { + Map map = ServletUtils.getRequest().getParameterMap(); + String params = JSONObject.toJSONString(map); + operLog.setOperParam(StringUtils.substring(params, 0, 255)); + } - /** - * 是否存在注解,如果存在就获取 - */ - private Log getAnnotationLog(JoinPoint joinPoint) throws Exception { - Signature signature = joinPoint.getSignature(); - MethodSignature methodSignature = (MethodSignature) signature; - Method method = methodSignature.getMethod(); + /** + * 是否存在注解,如果存在就获取 + */ + private Log getAnnotationLog(JoinPoint joinPoint) throws Exception + { + Signature signature = joinPoint.getSignature(); + MethodSignature methodSignature = (MethodSignature) signature; + Method method = methodSignature.getMethod(); - if (method != null) { - return method.getAnnotation(Log.class); - } - return null; - } + if (method != null) + { + return method.getAnnotation(Log.class); + } + return null; + } } diff --git a/src/main/java/com/ruoyi/framework/manager/AsyncManager.java b/src/main/java/com/ruoyi/framework/manager/AsyncManager.java index c56dd7765..0a015a6bd 100644 --- a/src/main/java/com/ruoyi/framework/manager/AsyncManager.java +++ b/src/main/java/com/ruoyi/framework/manager/AsyncManager.java @@ -9,18 +9,35 @@ import java.util.concurrent.TimeUnit; * * @author liuhulu */ -public class AsyncManager { - // 操作延迟 - private final int OPERATE_DELAY_TIME = 10; - // 异步操作此案城池 - private ScheduledThreadPoolExecutor executor = new ScheduledThreadPoolExecutor(5); - // 单例 - private static AsyncManager me = new AsyncManager(); - public static AsyncManager me() { - return me; - } - // 执行任务 - public void execute(TimerTask task) { - executor.schedule(task, OPERATE_DELAY_TIME, TimeUnit.MILLISECONDS); - } +public class AsyncManager +{ + /** + * 操作延迟10毫秒 + */ + private final int OPERATE_DELAY_TIME = 10; + + /** + * 异步操作任务调度线程池 + */ + private ScheduledThreadPoolExecutor executor = new ScheduledThreadPoolExecutor(5); + + /** + * 单例模式 + */ + private static AsyncManager me = new AsyncManager(); + + public static AsyncManager me() + { + return me; + } + + /** + * 执行任务 + * + * @param 任务task + */ + public void execute(TimerTask task) + { + executor.schedule(task, OPERATE_DELAY_TIME, TimeUnit.MILLISECONDS); + } } diff --git a/src/main/java/com/ruoyi/framework/manager/factory/AsyncFactory.java b/src/main/java/com/ruoyi/framework/manager/factory/AsyncFactory.java index 282ca6266..8d507c456 100644 --- a/src/main/java/com/ruoyi/framework/manager/factory/AsyncFactory.java +++ b/src/main/java/com/ruoyi/framework/manager/factory/AsyncFactory.java @@ -1,10 +1,8 @@ package com.ruoyi.framework.manager.factory; import java.util.TimerTask; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; - import com.ruoyi.common.constant.Constants; import com.ruoyi.common.utils.AddressUtils; import com.ruoyi.common.utils.LogUtils; @@ -18,7 +16,6 @@ import com.ruoyi.project.monitor.online.domain.UserOnline; import com.ruoyi.project.monitor.online.service.IUserOnlineService; import com.ruoyi.project.monitor.operlog.domain.OperLog; import com.ruoyi.project.monitor.operlog.service.IOperLogService; - import eu.bitwalker.useragentutils.UserAgent; /** @@ -27,99 +24,111 @@ import eu.bitwalker.useragentutils.UserAgent; * @author liuhulu * */ -public class AsyncFactory { - private static final Logger sys_user_logger = LoggerFactory.getLogger("sys-user"); +public class AsyncFactory +{ + private static final Logger sys_user_logger = LoggerFactory.getLogger("sys-user"); - /** - * 同步session到数据库 - * - * @param operLog - * @return - */ - public static TimerTask syncSessionToDb(final OnlineSession session) { - return new TimerTask() { - @Override - public void run() { - UserOnline online = new UserOnline(); - online.setSessionId(String.valueOf(session.getId())); - online.setDeptName(session.getDeptName()); - online.setLoginName(session.getLoginName()); - online.setStartTimestamp(session.getStartTimestamp()); - online.setLastAccessTime(session.getLastAccessTime()); - online.setExpireTime(session.getTimeout()); - online.setIpaddr(session.getHost()); - online.setLonginLocation(AddressUtils.getRealAddressByIP(session.getHost())); - online.setBrowser(session.getBrowser()); - online.setOs(session.getOs()); - online.setStatus(session.getStatus()); - online.setSession(session); - SpringUtils.getBean(IUserOnlineService.class).saveOnline(online); + /** + * 同步session到数据库 + * + * @param session 在线用户会话 + * @return 任务task + */ + public static TimerTask syncSessionToDb(final OnlineSession session) + { + return new TimerTask() + { + @Override + public void run() + { + UserOnline online = new UserOnline(); + online.setSessionId(String.valueOf(session.getId())); + online.setDeptName(session.getDeptName()); + online.setLoginName(session.getLoginName()); + online.setStartTimestamp(session.getStartTimestamp()); + online.setLastAccessTime(session.getLastAccessTime()); + online.setExpireTime(session.getTimeout()); + online.setIpaddr(session.getHost()); + online.setLonginLocation(AddressUtils.getRealAddressByIP(session.getHost())); + online.setBrowser(session.getBrowser()); + online.setOs(session.getOs()); + online.setStatus(session.getStatus()); + online.setSession(session); + SpringUtils.getBean(IUserOnlineService.class).saveOnline(online); - } - }; - } - /** - * 记录 操作log - * - * @param rc - * @return - */ - public static TimerTask recordOper(final OperLog operLog) { - return new TimerTask() { - @Override - public void run() { - // 远程查询操作地点 - operLog.setOperLocation(AddressUtils.getRealAddressByIP(operLog.getOperIp())); - SpringUtils.getBean(IOperLogService.class).insertOperlog(operLog); - } - }; - } + } + }; + } - /** - * 记录登陆信息 - * - * @param username - * @param status - * @param message - * @param userAgent - * @param args - * @return - */ - public static TimerTask recordLogininfor(final String username, final String status, final String message, final Object... args) { - final UserAgent userAgent = UserAgent.parseUserAgentString(ServletUtils.getRequest().getHeader("User-Agent")); - return new TimerTask() { - @Override - public void run() { - StringBuilder s = new StringBuilder(); - s.append(LogUtils.getBlock(ShiroUtils.getIp())); - s.append(AddressUtils.getRealAddressByIP(ShiroUtils.getIp())); - s.append(LogUtils.getBlock(username)); - s.append(LogUtils.getBlock(status)); - s.append(LogUtils.getBlock(message)); - // 打印信息到日志 - sys_user_logger.info(s.toString(), args); - // 获取客户端操作系统 - String os = userAgent.getOperatingSystem().getName(); - // 获取客户端浏览器 - String browser = userAgent.getBrowser().getName(); - // 封装对象 - Logininfor logininfor = new Logininfor(); - logininfor.setLoginName(username); - logininfor.setIpaddr(ShiroUtils.getIp()); - logininfor.setLoginLocation(AddressUtils.getRealAddressByIP(ShiroUtils.getIp())); - logininfor.setBrowser(browser); - logininfor.setOs(os); - logininfor.setMsg(message); - // 日志状态 - if (Constants.LOGIN_SUCCESS.equals(status) || Constants.LOGOUT.equals(status)) { - logininfor.setStatus(Constants.SUCCESS); - } else if (Constants.LOGIN_FAIL.equals(status)) { - logininfor.setStatus(Constants.FAIL); - } - // 插入数据 - SpringUtils.getBean(LogininforServiceImpl.class).insertLogininfor(logininfor); - } - }; - } + /** + * 操作日志记录 + * + * @param operLog 操作日志信息 + * @return 任务task + */ + public static TimerTask recordOper(final OperLog operLog) + { + return new TimerTask() + { + @Override + public void run() + { + // 远程查询操作地点 + operLog.setOperLocation(AddressUtils.getRealAddressByIP(operLog.getOperIp())); + SpringUtils.getBean(IOperLogService.class).insertOperlog(operLog); + } + }; + } + /** + * 记录登陆信息 + * + * @param username 用户名 + * @param status 状态 + * @param message 消息 + * @param args 列表 + * @return 任务task + */ + public static TimerTask recordLogininfor(final String username, final String status, final String message, final Object... args) + { + final UserAgent userAgent = UserAgent.parseUserAgentString(ServletUtils.getRequest().getHeader("User-Agent")); + return new TimerTask() + { + @Override + public void run() + { + StringBuilder s = new StringBuilder(); + s.append(LogUtils.getBlock(ShiroUtils.getIp())); + s.append(AddressUtils.getRealAddressByIP(ShiroUtils.getIp())); + s.append(LogUtils.getBlock(username)); + s.append(LogUtils.getBlock(status)); + s.append(LogUtils.getBlock(message)); + // 打印信息到日志 + sys_user_logger.info(s.toString(), args); + // 获取客户端操作系统 + String os = userAgent.getOperatingSystem().getName(); + // 获取客户端浏览器 + String browser = userAgent.getBrowser().getName(); + // 封装对象 + Logininfor logininfor = new Logininfor(); + logininfor.setLoginName(username); + logininfor.setIpaddr(ShiroUtils.getIp()); + logininfor.setLoginLocation(AddressUtils.getRealAddressByIP(ShiroUtils.getIp())); + logininfor.setBrowser(browser); + logininfor.setOs(os); + logininfor.setMsg(message); + // 日志状态 + if (Constants.LOGIN_SUCCESS.equals(status) || Constants.LOGOUT.equals(status)) + { + logininfor.setStatus(Constants.SUCCESS); + } + else if (Constants.LOGIN_FAIL.equals(status)) + { + logininfor.setStatus(Constants.FAIL); + } + // 插入数据 + SpringUtils.getBean(LogininforServiceImpl.class).insertLogininfor(logininfor); + } + }; + } } diff --git a/src/main/java/com/ruoyi/framework/shiro/service/LoginService.java b/src/main/java/com/ruoyi/framework/shiro/service/LoginService.java index 7f66793f3..0151562ed 100644 --- a/src/main/java/com/ruoyi/framework/shiro/service/LoginService.java +++ b/src/main/java/com/ruoyi/framework/shiro/service/LoginService.java @@ -3,7 +3,6 @@ package com.ruoyi.framework.shiro.service; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.springframework.util.StringUtils; - import com.ruoyi.common.constant.Constants; import com.ruoyi.common.constant.ShiroConstants; import com.ruoyi.common.constant.UserConstants; @@ -27,101 +26,104 @@ import com.ruoyi.project.system.user.service.IUserService; * @author ruoyi */ @Component -public class LoginService { - @Autowired - private PasswordService passwordService; +public class LoginService +{ + @Autowired + private PasswordService passwordService; - @Autowired - private IUserService userService; + @Autowired + private IUserService userService; - /** - * 登录 - */ - public User login(String username, String password) { - // 验证码校验 - if (!StringUtils.isEmpty(ServletUtils.getRequest().getAttribute(ShiroConstants.CURRENT_CAPTCHA))) { - AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.jcaptcha.error"))); - // SystemLogUtils.log(username, Constants.LOGIN_FAIL, - // MessageUtils.message("user.jcaptcha.error")); - throw new CaptchaException(); - } - // 用户名或密码为空 错误 - if (StringUtils.isEmpty(username) || StringUtils.isEmpty(password)) { - AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("not.null"))); - // SystemLogUtils.log(username, Constants.LOGIN_FAIL, - // MessageUtils.message("not.null")); - throw new UserNotExistsException(); - } - // 密码如果不在指定范围内 错误 - if (password.length() < UserConstants.PASSWORD_MIN_LENGTH || password.length() > UserConstants.PASSWORD_MAX_LENGTH) { - AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.password.not.match"))); - // SystemLogUtils.log(username, Constants.LOGIN_FAIL, - // MessageUtils.message("user.password.not.match")); - throw new UserPasswordNotMatchException(); - } + /** + * 登录 + */ + public User login(String username, String password) + { + // 验证码校验 + if (!StringUtils.isEmpty(ServletUtils.getRequest().getAttribute(ShiroConstants.CURRENT_CAPTCHA))) + { + AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.jcaptcha.error"))); + throw new CaptchaException(); + } + // 用户名或密码为空 错误 + if (StringUtils.isEmpty(username) || StringUtils.isEmpty(password)) + { + AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("not.null"))); + throw new UserNotExistsException(); + } + // 密码如果不在指定范围内 错误 + if (password.length() < UserConstants.PASSWORD_MIN_LENGTH + || password.length() > UserConstants.PASSWORD_MAX_LENGTH) + { + AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.password.not.match"))); + throw new UserPasswordNotMatchException(); + } - // 用户名不在指定范围内 错误 - if (username.length() < UserConstants.USERNAME_MIN_LENGTH || username.length() > UserConstants.USERNAME_MAX_LENGTH) { - AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.password.not.match"))); - // SystemLogUtils.log(username, Constants.LOGIN_FAIL, - // MessageUtils.message("user.password.not.match")); - throw new UserPasswordNotMatchException(); - } + // 用户名不在指定范围内 错误 + if (username.length() < UserConstants.USERNAME_MIN_LENGTH + || username.length() > UserConstants.USERNAME_MAX_LENGTH) + { + AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.password.not.match"))); + throw new UserPasswordNotMatchException(); + } - // 查询用户信息 - User user = userService.selectUserByLoginName(username); + // 查询用户信息 + User user = userService.selectUserByLoginName(username); - if (user == null && maybeMobilePhoneNumber(username)) { - user = userService.selectUserByPhoneNumber(username); - } + if (user == null && maybeMobilePhoneNumber(username)) + { + user = userService.selectUserByPhoneNumber(username); + } - if (user == null && maybeEmail(username)) { - user = userService.selectUserByEmail(username); - } + if (user == null && maybeEmail(username)) + { + user = userService.selectUserByEmail(username); + } - if (user == null || UserStatus.DELETED.getCode().equals(user.getDelFlag())) { - AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.not.exists"))); - // SystemLogUtils.log(username, Constants.LOGIN_FAIL, - // MessageUtils.message("user.not.exists")); - throw new UserNotExistsException(); - } + if (user == null || UserStatus.DELETED.getCode().equals(user.getDelFlag())) + { + AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.not.exists"))); + throw new UserNotExistsException(); + } - passwordService.validate(user, password); + passwordService.validate(user, password); - if (UserStatus.DISABLE.getCode().equals(user.getStatus())) { - AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.blocked", user.getRemark()))); - // SystemLogUtils.log(username, Constants.LOGIN_FAIL, - // MessageUtils.message("user.blocked", user.getRemark())); - throw new UserBlockedException(user.getRemark()); - } - AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success"))); - // SystemLogUtils.log(username, Constants.LOGIN_SUCCESS, - // MessageUtils.message("user.login.success")); - recordLoginInfo(user); - return user; - } + if (UserStatus.DISABLE.getCode().equals(user.getStatus())) + { + AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.blocked", user.getRemark()))); + throw new UserBlockedException(user.getRemark()); + } + AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success"))); + recordLoginInfo(user); + return user; + } - private boolean maybeEmail(String username) { - if (!username.matches(UserConstants.EMAIL_PATTERN)) { - return false; - } - return true; - } + private boolean maybeEmail(String username) + { + if (!username.matches(UserConstants.EMAIL_PATTERN)) + { + return false; + } + return true; + } - private boolean maybeMobilePhoneNumber(String username) { - if (!username.matches(UserConstants.MOBILE_PHONE_NUMBER_PATTERN)) { - return false; - } - return true; - } + private boolean maybeMobilePhoneNumber(String username) + { + if (!username.matches(UserConstants.MOBILE_PHONE_NUMBER_PATTERN)) + { + return false; + } + return true; + } - /** - * 记录登录信息 - */ - public void recordLoginInfo(User user) { - user.setLoginIp(ShiroUtils.getIp()); - user.setLoginDate(DateUtils.getNowDate()); - userService.updateUserInfo(user); - } + /** + * 记录登录信息 + */ + public void recordLoginInfo(User user) + { + user.setLoginIp(ShiroUtils.getIp()); + user.setLoginDate(DateUtils.getNowDate()); + userService.updateUserInfo(user); + } } diff --git a/src/main/java/com/ruoyi/framework/shiro/service/PasswordService.java b/src/main/java/com/ruoyi/framework/shiro/service/PasswordService.java index cbf512002..a973273d1 100644 --- a/src/main/java/com/ruoyi/framework/shiro/service/PasswordService.java +++ b/src/main/java/com/ruoyi/framework/shiro/service/PasswordService.java @@ -1,16 +1,13 @@ package com.ruoyi.framework.shiro.service; import java.util.concurrent.atomic.AtomicInteger; - import javax.annotation.PostConstruct; - import org.apache.shiro.cache.Cache; import org.apache.shiro.cache.CacheManager; import org.apache.shiro.crypto.hash.Md5Hash; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; - import com.ruoyi.common.constant.Constants; import com.ruoyi.common.exception.user.UserPasswordNotMatchException; import com.ruoyi.common.exception.user.UserPasswordRetryLimitExceedException; @@ -25,66 +22,70 @@ import com.ruoyi.project.system.user.domain.User; * @author ruoyi */ @Component -public class PasswordService { +public class PasswordService +{ - @Autowired - private CacheManager cacheManager; + @Autowired + private CacheManager cacheManager; - private Cache loginRecordCache; + private Cache loginRecordCache; - @Value(value = "${user.password.maxRetryCount}") - private String maxRetryCount; + @Value(value = "${user.password.maxRetryCount}") + private String maxRetryCount; - @PostConstruct - public void init() { - loginRecordCache = cacheManager.getCache("loginRecordCache"); - } + @PostConstruct + public void init() + { + loginRecordCache = cacheManager.getCache("loginRecordCache"); + } - public void validate(User user, String password) { - String loginName = user.getLoginName(); + public void validate(User user, String password) + { + String loginName = user.getLoginName(); - AtomicInteger retryCount = loginRecordCache.get(loginName); + AtomicInteger retryCount = loginRecordCache.get(loginName); - if (retryCount == null) { - retryCount = new AtomicInteger(0); - loginRecordCache.put(loginName, retryCount); - } - if (retryCount.incrementAndGet() > Integer.valueOf(maxRetryCount).intValue()) { - AsyncManager.me().execute(AsyncFactory.recordLogininfor(loginName, Constants.LOGIN_FAIL, MessageUtils.message("user.password.retry.limit.exceed"), maxRetryCount)); - // SystemLogUtils.log(loginName, Constants.LOGIN_FAIL, - // MessageUtils.message("user.password.retry.limit.exceed", - // maxRetryCount)); - throw new UserPasswordRetryLimitExceedException(Integer.valueOf(maxRetryCount).intValue()); - } + if (retryCount == null) + { + retryCount = new AtomicInteger(0); + loginRecordCache.put(loginName, retryCount); + } + if (retryCount.incrementAndGet() > Integer.valueOf(maxRetryCount).intValue()) + { + AsyncManager.me().execute(AsyncFactory.recordLogininfor(loginName, Constants.LOGIN_FAIL, MessageUtils.message("user.password.retry.limit.exceed"), maxRetryCount)); + throw new UserPasswordRetryLimitExceedException(Integer.valueOf(maxRetryCount).intValue()); + } - if (!matches(user, password)) { - AsyncManager.me().execute(AsyncFactory.recordLogininfor(loginName, Constants.LOGIN_FAIL, MessageUtils.message("user.password.retry.limit.count"), retryCount, password)); - // SystemLogUtils.log(loginName, Constants.LOGIN_FAIL, - // MessageUtils.message("user.password.retry.limit.count", - // retryCount, password)); - loginRecordCache.put(loginName, retryCount); - throw new UserPasswordNotMatchException(); - } else { - clearLoginRecordCache(loginName); - } - } + if (!matches(user, password)) + { + AsyncManager.me().execute(AsyncFactory.recordLogininfor(loginName, Constants.LOGIN_FAIL, MessageUtils.message("user.password.retry.limit.count"), retryCount, password)); + loginRecordCache.put(loginName, retryCount); + throw new UserPasswordNotMatchException(); + } + else + { + clearLoginRecordCache(loginName); + } + } - public boolean matches(User user, String newPassword) { - return user.getPassword().equals(encryptPassword(user.getLoginName(), newPassword, user.getSalt())); - } + public boolean matches(User user, String newPassword) + { + return user.getPassword().equals(encryptPassword(user.getLoginName(), newPassword, user.getSalt())); + } - public void clearLoginRecordCache(String username) { - loginRecordCache.remove(username); - } + public void clearLoginRecordCache(String username) + { + loginRecordCache.remove(username); + } - public String encryptPassword(String username, String password, String salt) { - return new Md5Hash(username + password + salt).toHex().toString(); - } + public String encryptPassword(String username, String password, String salt) + { + return new Md5Hash(username + password + salt).toHex().toString(); + } - public static void main(String[] args) { - // System.out.println(new PasswordService().encryptPassword("admin", - // "admin123", "111111")); - // System.out.println(new PasswordService().encryptPassword("ry", - // "admin123", "222222")); - } + public static void main(String[] args) + { + System.out.println(new PasswordService().encryptPassword("admin", "admin123", "111111")); + System.out.println(new PasswordService().encryptPassword("ry", "admin123", "222222")); + } } diff --git a/src/main/java/com/ruoyi/framework/shiro/session/OnlineSessionDAO.java b/src/main/java/com/ruoyi/framework/shiro/session/OnlineSessionDAO.java index f0015d64e..181a7aed1 100644 --- a/src/main/java/com/ruoyi/framework/shiro/session/OnlineSessionDAO.java +++ b/src/main/java/com/ruoyi/framework/shiro/session/OnlineSessionDAO.java @@ -2,12 +2,10 @@ package com.ruoyi.framework.shiro.session; import java.io.Serializable; import java.util.Date; - import org.apache.shiro.session.Session; import org.apache.shiro.session.mgt.eis.EnterpriseCacheSessionDAO; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; - import com.ruoyi.framework.manager.AsyncManager; import com.ruoyi.framework.manager.factory.AsyncFactory; import com.ruoyi.project.monitor.online.domain.OnlineSession; @@ -19,90 +17,101 @@ import com.ruoyi.project.monitor.online.service.IUserOnlineService; * * @author ruoyi */ -public class OnlineSessionDAO extends EnterpriseCacheSessionDAO { - /** - * 同步session到数据库的周期 单位为毫秒(默认1分钟) - */ - @Value("${shiro.session.dbSyncPeriod}") - private int dbSyncPeriod; +public class OnlineSessionDAO extends EnterpriseCacheSessionDAO +{ + /** + * 同步session到数据库的周期 单位为毫秒(默认1分钟) + */ + @Value("${shiro.session.dbSyncPeriod}") + private int dbSyncPeriod; - /** - * 上次同步数据库的时间戳 - */ - private static final String LAST_SYNC_DB_TIMESTAMP = OnlineSessionDAO.class.getName() + "LAST_SYNC_DB_TIMESTAMP"; + /** + * 上次同步数据库的时间戳 + */ + private static final String LAST_SYNC_DB_TIMESTAMP = OnlineSessionDAO.class.getName() + "LAST_SYNC_DB_TIMESTAMP"; - @Autowired - private IUserOnlineService onlineService; + @Autowired + private IUserOnlineService onlineService; - @Autowired - private OnlineSessionFactory onlineSessionFactory; + @Autowired + private OnlineSessionFactory onlineSessionFactory; - public OnlineSessionDAO() { - super(); - } + public OnlineSessionDAO() + { + super(); + } - public OnlineSessionDAO(long expireTime) { - super(); - } + public OnlineSessionDAO(long expireTime) + { + super(); + } - /** - * 根据会话ID获取会话 - * - * @param sessionId - * 会话ID - * @return ShiroSession - */ - @Override - protected Session doReadSession(Serializable sessionId) { - UserOnline userOnline = onlineService.selectOnlineById(String.valueOf(sessionId)); - if (userOnline == null) { - return null; - } - return onlineSessionFactory.createSession(userOnline); - } + /** + * 根据会话ID获取会话 + * + * @param sessionId 会话ID + * @return ShiroSession + */ + @Override + protected Session doReadSession(Serializable sessionId) + { + UserOnline userOnline = onlineService.selectOnlineById(String.valueOf(sessionId)); + if (userOnline == null) + { + return null; + } + return onlineSessionFactory.createSession(userOnline); + } - /** - * 更新会话;如更新会话最后访问时间/停止会话/设置超时时间/设置移除属性等会调用 - */ - public void syncToDb(OnlineSession onlineSession) { - Date lastSyncTimestamp = (Date) onlineSession.getAttribute(LAST_SYNC_DB_TIMESTAMP); - if (lastSyncTimestamp != null) { - boolean needSync = true; - long deltaTime = onlineSession.getLastAccessTime().getTime() - lastSyncTimestamp.getTime(); - if (deltaTime < dbSyncPeriod * 60 * 1000) { - // 时间差不足 无需同步 - needSync = false; - } - boolean isGuest = onlineSession.getUserId() == null || onlineSession.getUserId() == 0L; + /** + * 更新会话;如更新会话最后访问时间/停止会话/设置超时时间/设置移除属性等会调用 + */ + public void syncToDb(OnlineSession onlineSession) + { + Date lastSyncTimestamp = (Date) onlineSession.getAttribute(LAST_SYNC_DB_TIMESTAMP); + if (lastSyncTimestamp != null) + { + boolean needSync = true; + long deltaTime = onlineSession.getLastAccessTime().getTime() - lastSyncTimestamp.getTime(); + if (deltaTime < dbSyncPeriod * 60 * 1000) + { + // 时间差不足 无需同步 + needSync = false; + } + boolean isGuest = onlineSession.getUserId() == null || onlineSession.getUserId() == 0L; - // session 数据变更了 同步 - if (isGuest == false && onlineSession.isAttributeChanged()) { - needSync = true; - } + // session 数据变更了 同步 + if (isGuest == false && onlineSession.isAttributeChanged()) + { + needSync = true; + } - if (needSync == false) { - return; - } - } - onlineSession.setAttribute(LAST_SYNC_DB_TIMESTAMP, onlineSession.getLastAccessTime()); - // 更新完后 重置标识 - if (onlineSession.isAttributeChanged()) { - onlineSession.resetAttributeChanged(); - } - // onlineService.saveOnline(UserOnline.fromOnlineSession(onlineSession)); - AsyncManager.me().execute(AsyncFactory.syncSessionToDb(onlineSession)); - } + if (needSync == false) + { + return; + } + } + onlineSession.setAttribute(LAST_SYNC_DB_TIMESTAMP, onlineSession.getLastAccessTime()); + // 更新完后 重置标识 + if (onlineSession.isAttributeChanged()) + { + onlineSession.resetAttributeChanged(); + } + AsyncManager.me().execute(AsyncFactory.syncSessionToDb(onlineSession)); + } - /** - * 当会话过期/停止(如用户退出时)属性等会调用 - */ - @Override - protected void doDelete(Session session) { - OnlineSession onlineSession = (OnlineSession) session; - if (null == onlineSession) { - return; - } - onlineSession.setStatus(OnlineSession.OnlineStatus.off_line); - onlineService.deleteOnlineById(String.valueOf(onlineSession.getId())); - } + /** + * 当会话过期/停止(如用户退出时)属性等会调用 + */ + @Override + protected void doDelete(Session session) + { + OnlineSession onlineSession = (OnlineSession) session; + if (null == onlineSession) + { + return; + } + onlineSession.setStatus(OnlineSession.OnlineStatus.off_line); + onlineService.deleteOnlineById(String.valueOf(onlineSession.getId())); + } } diff --git a/src/main/java/com/ruoyi/framework/shiro/web/filter/LogoutFilter.java b/src/main/java/com/ruoyi/framework/shiro/web/filter/LogoutFilter.java index 3407a30b4..505c6cd8c 100644 --- a/src/main/java/com/ruoyi/framework/shiro/web/filter/LogoutFilter.java +++ b/src/main/java/com/ruoyi/framework/shiro/web/filter/LogoutFilter.java @@ -2,12 +2,10 @@ package com.ruoyi.framework.shiro.web.filter; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; - import org.apache.shiro.session.SessionException; import org.apache.shiro.subject.Subject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; - import com.ruoyi.common.constant.Constants; import com.ruoyi.common.utils.MessageUtils; import com.ruoyi.common.utils.StringUtils; @@ -21,58 +19,69 @@ import com.ruoyi.project.system.user.domain.User; * * @author ruoyi */ -public class LogoutFilter extends org.apache.shiro.web.filter.authc.LogoutFilter { - private static final Logger log = LoggerFactory.getLogger(LogoutFilter.class); +public class LogoutFilter extends org.apache.shiro.web.filter.authc.LogoutFilter +{ + private static final Logger log = LoggerFactory.getLogger(LogoutFilter.class); - /** - * 退出后重定向的地址 - */ - private String loginUrl; + /** + * 退出后重定向的地址 + */ + private String loginUrl; - public String getLoginUrl() { - return loginUrl; - } + public String getLoginUrl() + { + return loginUrl; + } - public void setLoginUrl(String loginUrl) { - this.loginUrl = loginUrl; - } + public void setLoginUrl(String loginUrl) + { + this.loginUrl = loginUrl; + } - @Override - protected boolean preHandle(ServletRequest request, ServletResponse response) throws Exception { - try { - Subject subject = getSubject(request, response); - String redirectUrl = getRedirectUrl(request, response, subject); - try { - User user = ShiroUtils.getUser(); - if (StringUtils.isNotNull(user)) { - String loginName = user.getLoginName(); - // 记录用户退出日志 - AsyncManager.me().execute(AsyncFactory.recordLogininfor(loginName, Constants.LOGOUT, MessageUtils.message("user.logout.success"))); - // SystemLogUtils.log(loginName, Constants.LOGOUT, - // MessageUtils.message("user.logout.success")); - } - // 退出登录 - subject.logout(); - } catch (SessionException ise) { - log.error("logout fail.", ise); - } - issueRedirect(request, response, redirectUrl); - } catch (Exception e) { - log.error("Encountered session exception during logout. This can generally safely be ignored.", e); - } - return false; - } + @Override + protected boolean preHandle(ServletRequest request, ServletResponse response) throws Exception + { + try + { + Subject subject = getSubject(request, response); + String redirectUrl = getRedirectUrl(request, response, subject); + try + { + User user = ShiroUtils.getUser(); + if (StringUtils.isNotNull(user)) + { + String loginName = user.getLoginName(); + // 记录用户退出日志 + AsyncManager.me().execute(AsyncFactory.recordLogininfor(loginName, Constants.LOGOUT, MessageUtils.message("user.logout.success"))); + } + // 退出登录 + subject.logout(); + } + catch (SessionException ise) + { + log.error("logout fail.", ise); + } + issueRedirect(request, response, redirectUrl); + } + catch (Exception e) + { + log.error("Encountered session exception during logout. This can generally safely be ignored.", e); + } + return false; + } - /** - * 退出跳转URL - */ - @Override - protected String getRedirectUrl(ServletRequest request, ServletResponse response, Subject subject) { - String url = getLoginUrl(); - if (StringUtils.isNotEmpty(url)) { - return url; - } - return super.getRedirectUrl(request, response, subject); - } + /** + * 退出跳转URL + */ + @Override + protected String getRedirectUrl(ServletRequest request, ServletResponse response, Subject subject) + { + String url = getLoginUrl(); + if (StringUtils.isNotEmpty(url)) + { + return url; + } + return super.getRedirectUrl(request, response, subject); + } } diff --git a/src/main/java/com/ruoyi/project/monitor/online/domain/UserOnline.java b/src/main/java/com/ruoyi/project/monitor/online/domain/UserOnline.java index 5bea9c412..8dba3d4fd 100644 --- a/src/main/java/com/ruoyi/project/monitor/online/domain/UserOnline.java +++ b/src/main/java/com/ruoyi/project/monitor/online/domain/UserOnline.java @@ -1,8 +1,6 @@ package com.ruoyi.project.monitor.online.domain; import java.util.Date; - -import com.ruoyi.common.utils.AddressUtils; import com.ruoyi.framework.web.domain.BaseEntity; import com.ruoyi.project.monitor.online.domain.OnlineSession.OnlineStatus; @@ -11,164 +9,172 @@ import com.ruoyi.project.monitor.online.domain.OnlineSession.OnlineStatus; * * @author ruoyi */ -public class UserOnline extends BaseEntity { - private static final long serialVersionUID = 1L; - /** 用户会话id */ - private String sessionId; +public class UserOnline extends BaseEntity +{ + private static final long serialVersionUID = 1L; + /** 用户会话id */ + private String sessionId; - /** 部门名称 */ - private String deptName; + /** 部门名称 */ + private String deptName; - /** 登录名称 */ - private String loginName; + /** 登录名称 */ + private String loginName; - /** 登录IP地址 */ - private String ipaddr; + /** 登录IP地址 */ + private String ipaddr; - /** 登录地址 */ - private String longinLocation; + /** 登录地址 */ + private String longinLocation; - /** 浏览器类型 */ - private String browser; + /** 浏览器类型 */ + private String browser; - /** 操作系统 */ - private String os; + /** 操作系统 */ + private String os; - /** session创建时间 */ - private Date startTimestamp; + /** session创建时间 */ + private Date startTimestamp; - /** session最后访问时间 */ - private Date lastAccessTime; + /** session最后访问时间 */ + private Date lastAccessTime; - /** 超时时间,单位为分钟 */ - private Long expireTime; + /** 超时时间,单位为分钟 */ + private Long expireTime; - /** 在线状态 */ - private OnlineStatus status = OnlineStatus.on_line; + /** 在线状态 */ + private OnlineStatus status = OnlineStatus.on_line; - /** 备份的当前用户会话 */ - private OnlineSession session; + /** 备份的当前用户会话 */ + private OnlineSession session; - /** - * 设置session对象 - */ - @Deprecated - public static final UserOnline fromOnlineSession(OnlineSession session) { - UserOnline online = new UserOnline(); - online.setSessionId(String.valueOf(session.getId())); - online.setDeptName(session.getDeptName()); - online.setLoginName(session.getLoginName()); - online.setStartTimestamp(session.getStartTimestamp()); - online.setLastAccessTime(session.getLastAccessTime()); - online.setExpireTime(session.getTimeout()); - online.setIpaddr(session.getHost()); - online.setLonginLocation(AddressUtils.getRealAddressByIP(session.getHost())); - online.setBrowser(session.getBrowser()); - online.setOs(session.getOs()); - online.setStatus(session.getStatus()); - online.setSession(session); - return online; - } + public String getSessionId() + { + return sessionId; + } - public String getSessionId() { - return sessionId; - } + public void setSessionId(String sessionId) + { + this.sessionId = sessionId; + } - public void setSessionId(String sessionId) { - this.sessionId = sessionId; - } + public String getDeptName() + { + return deptName; + } - public String getDeptName() { - return deptName; - } + public void setDeptName(String deptName) + { + this.deptName = deptName; + } - public void setDeptName(String deptName) { - this.deptName = deptName; - } + public String getLoginName() + { + return loginName; + } - public String getLoginName() { - return loginName; - } + public void setLoginName(String loginName) + { + this.loginName = loginName; + } - public void setLoginName(String loginName) { - this.loginName = loginName; - } + public String getIpaddr() + { + return ipaddr; + } - public String getIpaddr() { - return ipaddr; - } + public void setIpaddr(String ipaddr) + { + this.ipaddr = ipaddr; + } - public void setIpaddr(String ipaddr) { - this.ipaddr = ipaddr; - } + public String getLonginLocation() + { + return longinLocation; + } - public String getLonginLocation() { - return longinLocation; - } + public void setLonginLocation(String longinLocation) + { + this.longinLocation = longinLocation; + } - public void setLonginLocation(String longinLocation) { - this.longinLocation = longinLocation; - } + public String getBrowser() + { + return browser; + } - public String getBrowser() { - return browser; - } + public void setBrowser(String browser) + { + this.browser = browser; + } - public void setBrowser(String browser) { - this.browser = browser; - } + public String getOs() + { + return os; + } - public String getOs() { - return os; - } + public void setOs(String os) + { + this.os = os; + } - public void setOs(String os) { - this.os = os; - } + public Date getStartTimestamp() + { + return startTimestamp; + } - public Date getStartTimestamp() { - return startTimestamp; - } + public void setStartTimestamp(Date startTimestamp) + { + this.startTimestamp = startTimestamp; + } - public void setStartTimestamp(Date startTimestamp) { - this.startTimestamp = startTimestamp; - } + public Date getLastAccessTime() + { + return lastAccessTime; + } - public Date getLastAccessTime() { - return lastAccessTime; - } + public void setLastAccessTime(Date lastAccessTime) + { + this.lastAccessTime = lastAccessTime; + } - public void setLastAccessTime(Date lastAccessTime) { - this.lastAccessTime = lastAccessTime; - } + public Long getExpireTime() + { + return expireTime; + } - public Long getExpireTime() { - return expireTime; - } + public void setExpireTime(Long expireTime) + { + this.expireTime = expireTime; + } - public void setExpireTime(Long expireTime) { - this.expireTime = expireTime; - } + public OnlineStatus getStatus() + { + return status; + } - public OnlineStatus getStatus() { - return status; - } + public void setStatus(OnlineStatus status) + { + this.status = status; + } - public void setStatus(OnlineStatus status) { - this.status = status; - } + public OnlineSession getSession() + { + return session; + } - public OnlineSession getSession() { - return session; - } + public void setSession(OnlineSession session) + { + this.session = session; + } - public void setSession(OnlineSession session) { - this.session = session; - } - - @Override - public String toString() { - return "UserOnline [sessionId=" + sessionId + ", deptName=" + deptName + ", loginName=" + loginName + ", ipaddr=" + ipaddr + ", browser=" + browser + ", os=" + os + ", startTimestamp=" + startTimestamp + ", lastAccessTime=" + lastAccessTime + ", expireTime=" + expireTime + ", status=" + status + ", session=" + session + "]"; - } + @Override + public String toString() + { + return "UserOnline [sessionId=" + sessionId + ", deptName=" + deptName + ", loginName=" + loginName + + ", ipaddr=" + ipaddr + ", browser=" + browser + ", os=" + os + ", startTimestamp=" + startTimestamp + + ", lastAccessTime=" + lastAccessTime + ", expireTime=" + expireTime + ", status=" + status + + ", session=" + session + "]"; + } }