支持系统访问记录

This commit is contained in:
RuoYi 2018-03-02 12:44:48 +08:00
parent 64fe58211d
commit 9e2e65e69f
99 changed files with 374 additions and 241 deletions

View File

@ -106,14 +106,14 @@ create table sys_menu (
insert into sys_menu values('1', '系统管理', '0', '1', '#', 'M', '0', '#', 'fa fa-gear', '2018-01-01', '', 'admin', '系统管理目录');
insert into sys_menu values('2', '系统监控', '0', '2', '#', 'M', '0', '#', 'fa fa-video-camera', '2018-01-01', '', 'admin', '系统监控目录');
-- 二级菜单
insert into sys_menu values('3', '用户管理', '1', '1', '/system/user/userList', 'C', '0', 'system:user:list', '#', '2018-01-01', '', 'admin', '用户管理菜单');
insert into sys_menu values('4', '角色管理', '1', '2', '/system/role/roleList', 'C', '0', 'system:role:list', '#', '2018-01-01', '', 'admin', '角色管理菜单');
insert into sys_menu values('5', '菜单管理', '1', '3', '/system/menu/menuList', 'C', '0', 'system:menu:list', '#', '2018-01-01', '', 'admin', '菜单管理菜单');
insert into sys_menu values('6', '部门管理', '1', '3', '/system/dept/deptList', 'C', '0', 'system:dept:list', '#', '2018-01-01', '', 'admin', '部门管理菜单');
insert into sys_menu values('7', '操作日志', '2', '1', '/system/operlog/operlogList', 'C', '0', 'system:operlog:list', '#', '2018-01-01', '', 'admin', '操作日志菜单');
insert into sys_menu values('8', '登录日志', '2', '2', '/system/userlog/userlogList', 'C', '0', 'system:userlog:list', '#', '2018-01-01', '', 'admin', '登录日志菜单');
insert into sys_menu values('9', '在线用户', '2', '3', '/monitor/online', 'C', '0', 'monitor:online', '#', '2018-01-01', '', 'admin', '在线用户菜单');
insert into sys_menu values('10', '数据监控', '2', '4', '/monitor/druid/index.html', 'C', '0', 'monitor:druid:list', '#', '2018-01-01', '', 'admin', '数据监控菜单');
insert into sys_menu values('3', '用户管理', '1', '1', '/system/user/userList', 'C', '0', 'system:user:list', '#', '2018-01-01', '', 'admin', '用户管理菜单');
insert into sys_menu values('4', '角色管理', '1', '2', '/system/role/roleList', 'C', '0', 'system:role:list', '#', '2018-01-01', '', 'admin', '角色管理菜单');
insert into sys_menu values('5', '菜单管理', '1', '3', '/system/menu/menuList', 'C', '0', 'system:menu:list', '#', '2018-01-01', '', 'admin', '菜单管理菜单');
insert into sys_menu values('6', '部门管理', '1', '3', '/system/dept/deptList', 'C', '0', 'system:dept:list', '#', '2018-01-01', '', 'admin', '部门管理菜单');
insert into sys_menu values('7', '操作日志', '2', '1', '/monitor/operlog', 'C', '0', 'monitor:operlog', '#', '2018-01-01', '', 'admin', '操作日志菜单');
insert into sys_menu values('8', '登录日志', '2', '2', '/monitor/logininfor', 'C', '0', 'monitor:logininfor', '#', '2018-01-01', '', 'admin', '登录日志菜单');
insert into sys_menu values('9', '在线用户', '2', '3', '/monitor/online', 'C', '0', 'monitor:online', '#', '2018-01-01', '', 'admin', '在线用户菜单');
insert into sys_menu values('10', '数据监控', '2', '4', '/monitor/druid/index.html', 'C', '0', 'monitor:druid', '#', '2018-01-01', '', 'admin', '数据监控菜单');
--- 三级用户按钮
insert into sys_menu values('11', '用户新增', '3', '1', '/system/user/add', 'F', '0', 'sys:user:add', '#', '2018-01-01', '', 'admin', '用户管理新增按钮');
insert into sys_menu values('12', '用户修改', '3', '2', '/system/user/update', 'F', '0', 'sys:user:update', '#', '2018-01-01', '', 'admin', '用户管理修改按钮');
@ -131,10 +131,6 @@ insert into sys_menu values('21', '菜单新增', '5', '1', '/system/menu/add',
insert into sys_menu values('22', '菜单修改', '5', '2', '/system/menu/update', 'F', '0', 'sys:menu:update', '#', '2018-01-01', '', 'admin', '菜单管理修改按钮');
insert into sys_menu values('23', '菜单删除', '5', '3', '/system/menu/delete', 'F', '0', 'sys:menu:delete', '#', '2018-01-01', '', 'admin', '菜单管理删除按钮');
insert into sys_menu values('24', '菜单查询', '5', '4', '/system/menu/select', 'F', '0', 'sys:menu:select', '#', '2018-01-01', '', 'system', '菜单管理查询按钮');
--- 三级日志按钮
insert into sys_menu values('25', '操作日志查询', '4', '5', '/system/operlog/auth', 'F', '0', 'sys:operlog:select', '#', '2018-01-01', '', 'admin', '操作日志查询按钮');
insert into sys_menu values('26', '登录日志查询', '4', '5', '/system/userlog/auth', 'F', '0', 'sys:userlog:select', '#', '2018-01-01', '', 'admin', '登录日志查询按钮');
-- ----------------------------
-- 5、用户和角色关联表 用户N-1角色
@ -244,16 +240,16 @@ drop table if exists sys_logininfor;
create table sys_logininfor (
info_id int(11) not null auto_increment comment '访问ID',
login_name varchar(50) default '' comment '登录名',
status int(1) default 0 comment '登录状态 0成功 1失败',
ipaddr varchar(50) default '' comment '登录IP地址',
browser varchar(50) default '' comment '浏览器类型',
os varchar(50) default '' comment '操作系统',
status int(1) default 0 comment '登录状态 0成功 1失败',
msg varchar(255) default '' comment '提示消息',
logondate timestamp default current_timestamp comment '访问时间',
login_time timestamp default current_timestamp comment '访问时间',
primary key (info_id)
) engine=innodb auto_increment=100 default charset=utf8;
insert into sys_logininfor values(1, 'admin', 0 , '127.0.0.1', 'Chrome 45', 'Windows 7', '登录成功' ,'2018-01-01');
insert into sys_logininfor values(1, 'admin', '127.0.0.1', 'Chrome 45', 'Windows 7', 0, '登录成功' ,'2018-01-01');
-- ----------------------------
-- 10、在线用户记录
@ -269,7 +265,7 @@ create table sys_user_online (
status varchar(10) default '' comment '在线状态on_line在线off_line离线',
start_timestsamp timestamp default current_timestamp comment 'session创建时间',
last_access_time timestamp default current_timestamp comment 'session最后访问时间',
expireTime int(5) default 0 comment '超时时间,单位为分钟',
expire_time int(5) default 0 comment '超时时间,单位为分钟',
primary key (sessionId)
) engine=innodb default charset=utf8;

View File

@ -8,7 +8,7 @@ import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
/**
* 启动程序
*
* @author yangzz
* @author ruoyi
*/
@SpringBootApplication
@EnableAutoConfiguration(exclude = { DataSourceAutoConfiguration.class })

View File

@ -3,7 +3,7 @@ package com.ruoyi.common.constant;
/**
* 通用常量信息
*
* @author yangzz
* @author ruoyi
*/
public class CommonConstant
{

View File

@ -3,7 +3,7 @@ package com.ruoyi.common.constant;
/**
* Shiro通用常量
*
* @author yangzz
* @author ruoyi
*/
public interface ShiroConstants
{
@ -17,11 +17,6 @@ public interface ShiroConstants
*/
public static final String CURRENT_USERNAME = "username";
/**
* 验证码
*/
public static final String CURRENT_JCAPTCHA = "jcaptcha";
/**
* 消息key
*/
@ -32,11 +27,6 @@ public interface ShiroConstants
*/
public static String ERROR = "errorMsg";
/**
* 验证码错误
*/
public static final String JCAPTCHA_ERROR = "jcaptchaError";
/**
* 编码格式
*/

View File

@ -3,7 +3,7 @@ package com.ruoyi.common.constant;
/**
* 用户常量信息
*
* @author yangzz
* @author ruoyi
*/
public class UserConstants
{
@ -23,8 +23,6 @@ public class UserConstants
/** 名称是否唯一的返回结果码 */
public final static String NAME_UNIQUE = "0";
public final static String NAME_NOT_UNIQUE = "1";
/**
* 用户名长度限制
*/

View File

@ -1,18 +0,0 @@
package com.ruoyi.common.exception;
import com.ruoyi.common.exception.user.UserException;
/**
* 验证码错误异常类
*
* @author yangzz
*/
public class CaptchaException extends UserException
{
private static final long serialVersionUID = 1L;
public CaptchaException()
{
super("user.jcaptcha.error", null);
}
}

View File

@ -7,7 +7,7 @@ import com.ruoyi.common.utils.MessageUtils;
/**
* 基础异常
*
* @author yangzz
* @author ruoyi
*/
public class BaseException extends RuntimeException
{

View File

@ -3,7 +3,7 @@ package com.ruoyi.common.exception.base;
/**
* Dao异常
*
* @author yangzz
* @author ruoyi
*/
public class DaoException extends RuntimeException
{

View File

@ -3,7 +3,7 @@ package com.ruoyi.common.exception.user;
/**
* 角色锁定异常类
*
* @author yangzz
* @author ruoyi
*/
public class RoleBlockedException extends UserException
{

View File

@ -3,7 +3,7 @@ package com.ruoyi.common.exception.user;
/**
* 用户锁定异常类
*
* @author yangzz
* @author ruoyi
*/
public class UserBlockedException extends UserException
{

View File

@ -5,7 +5,7 @@ import com.ruoyi.common.exception.base.BaseException;
/**
* 用户信息异常类
*
* @author yangzz
* @author ruoyi
*/
public class UserException extends BaseException
{

View File

@ -3,7 +3,7 @@ package com.ruoyi.common.exception.user;
/**
* 用户不存在异常类
*
* @author yangzz
* @author ruoyi
*/
public class UserNotExistsException extends UserException
{

View File

@ -3,7 +3,7 @@ package com.ruoyi.common.exception.user;
/**
* 用户密码不正确或不符合规范异常类
*
* @author yangzz
* @author ruoyi
*/
public class UserPasswordNotMatchException extends UserException
{

View File

@ -3,7 +3,7 @@ package com.ruoyi.common.exception.user;
/**
* 用户错误记数异常类
*
* @author yangzz
* @author ruoyi
*/
public class UserPasswordRetryLimitCountException extends UserException
{

View File

@ -3,7 +3,7 @@ package com.ruoyi.common.exception.user;
/**
* 用户错误最大次数异常类
*
* @author yangzz
* @author ruoyi
*/
public class UserPasswordRetryLimitExceedException extends UserException
{

View File

@ -7,7 +7,7 @@ import java.util.Date;
/**
* 时间工具类
*
* @author yangzz
* @author ruoyi
*/
public class DateUtils
{

View File

@ -7,7 +7,7 @@ import org.springframework.web.context.request.ServletRequestAttributes;
/**
* 客户端工具类
*
* @author yangzz
* @author ruoyi
*/
public class HttpContextUtils
{

View File

@ -5,7 +5,7 @@ import javax.servlet.http.HttpServletRequest;
/**
* 获取IP方法
*
* @author yangzz
* @author ruoyi
*/
public class IpUtils
{

View File

@ -12,7 +12,7 @@ import java.util.Map;
/**
* 处理并记录日志文件
*
* @author yangzz
* @author ruoyi
*/
public class LogUtils
{

View File

@ -6,7 +6,7 @@ import java.security.MessageDigest;
/**
* Md5加密方法
*
* @author yangzz
* @author ruoyi
*/
@Slf4j
public class Md5Utils

View File

@ -6,7 +6,7 @@ import com.ruoyi.common.utils.spring.SpringUtils;
/**
* 获取i18n资源文件
*
* @author yangzz
* @author ruoyi
*/
public class MessageUtils
{

View File

@ -6,7 +6,7 @@ import java.util.Map;
/**
* 字符串工具类
*
* @author yangzz
* @author ruoyi
*/
public class StringUtils
{

View File

@ -6,14 +6,15 @@ import org.slf4j.LoggerFactory;
import com.ruoyi.common.constant.CommonConstant;
import com.ruoyi.common.utils.security.ShiroUtils;
import com.ruoyi.common.utils.spring.SpringUtils;
import com.ruoyi.project.system.logininfor.domain.Logininfor;
import com.ruoyi.project.system.logininfor.service.LogininforServiceImpl;
import com.ruoyi.project.monitor.logininfor.domain.Logininfor;
import com.ruoyi.project.monitor.logininfor.service.LogininforServiceImpl;
import eu.bitwalker.useragentutils.UserAgent;
/**
* 记录用户日志信息
*
* @author yangzz
* @author ruoyi
*/
public class SystemLogUtils
{

View File

@ -9,7 +9,7 @@ import com.ruoyi.project.system.menu.domain.Menu;
/**
* 权限数据处理
*
* @author y
* @author ruoyi
*/
public class TreeUtils
{

View File

@ -8,7 +8,7 @@ import com.ruoyi.project.system.user.domain.User;
/**
* shiro 工具类
*
* @author yangzz
* @author ruoyi
*/
public class ShiroUtils
{

View File

@ -9,7 +9,7 @@ import org.springframework.stereotype.Component;
/**
* spring工具类 方便在非spring管理环境中获取bean
*
* @author yangzz
* @author ruoyi
*/
@Component
public final class SpringUtils implements BeanFactoryPostProcessor

View File

@ -24,7 +24,7 @@ import lombok.extern.slf4j.Slf4j;
/**
* 操作日志记录处理
*
* @author yangzz
* @author ruoyi
*/
@Aspect

View File

@ -9,7 +9,7 @@ import java.lang.annotation.Target;
/**
* 自定义操作日志记录注解
*
* @author yangzz
* @author ruoyi
*
*/
@Target({ ElementType.PARAMETER, ElementType.METHOD })

View File

@ -9,7 +9,7 @@ import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter
/**
* 通用配置
*
* @author yangzz
* @author ruoyi
*/
@Configuration
public class BaseConfig extends WebMvcConfigurerAdapter

View File

@ -6,7 +6,7 @@ import org.springframework.stereotype.Component;
/**
* 配置信息
*
* @author yangzz
* @author ruoyi
*/
@Component
@ConfigurationProperties(prefix = "ruoyi")

View File

@ -16,7 +16,7 @@ import lombok.extern.slf4j.Slf4j;
/**
* Druid数据库信息配置加载
*
* @author yangzz
* @author ruoyi
*/
@Configuration
@Slf4j

View File

@ -14,7 +14,7 @@ import org.springframework.web.servlet.i18n.SessionLocaleResolver;
/**
* 资源文件配置加载
*
* @author yangzz
* @author ruoyi
*/
@Configuration
@Component

View File

@ -29,7 +29,7 @@ import at.pollux.thymeleaf.shiro.dialect.ShiroDialect;
/**
* 权限配置加载
*
* @author yangzz
* @author ruoyi
*/
@Configuration
public class ShiroConfig

View File

@ -34,7 +34,7 @@ import com.ruoyi.framework.web.page.PageUtilEntity;
/**
* 拦截需要分页SQL
*
* @author yangzz
* @author ruoyi
*/
@Intercepts({ @Signature(type = StatementHandler.class, method = "prepare", args = { Connection.class, Integer.class }) })
public class ExecutorPageMethodInterceptor implements Interceptor

View File

@ -5,7 +5,7 @@ import java.lang.reflect.Field;
/**
* 拦截需要分页SQL 反射工具
*
* @author yangzz
* @author ruoyi
*/
public class ReflectHelper
{

View File

@ -14,8 +14,6 @@ import org.apache.shiro.authz.SimpleAuthorizationInfo;
import org.apache.shiro.realm.AuthorizingRealm;
import org.apache.shiro.subject.PrincipalCollection;
import org.springframework.beans.factory.annotation.Autowired;
import com.ruoyi.common.exception.CaptchaException;
import com.ruoyi.common.exception.user.RoleBlockedException;
import com.ruoyi.common.exception.user.UserBlockedException;
import com.ruoyi.common.exception.user.UserNotExistsException;
@ -26,13 +24,12 @@ import com.ruoyi.framework.shiro.service.LoginService;
import com.ruoyi.project.system.menu.service.IMenuService;
import com.ruoyi.project.system.role.service.IRoleService;
import com.ruoyi.project.system.user.domain.User;
import lombok.extern.slf4j.Slf4j;
/**
* 自定义Realm 处理登录 权限
*
* @author yangzz
* @author ruoyi
*/
@Slf4j
public class UserRealm extends AuthorizingRealm
@ -81,11 +78,6 @@ public class UserRealm extends AuthorizingRealm
{
user = loginService.login(username, password);
}
catch (CaptchaException e)
{
throw new AuthenticationException(e.getMessage(), e);
}
catch (UserNotExistsException e)
{
throw new UnknownAccountException(e.getMessage(), e);

View File

@ -16,7 +16,7 @@ import com.ruoyi.project.system.user.service.IUserService;
/**
* 登录校验方法
*
* @author yangzz
* @author ruoyi
*/
@Component
public class LoginService

View File

@ -19,7 +19,7 @@ import com.ruoyi.project.system.user.domain.User;
/**
* 登录密码方法
*
* @author yangzz
* @author ruoyi
*/
@Component
public class PasswordService

View File

@ -13,7 +13,7 @@ import com.ruoyi.project.monitor.online.service.IUserOnlineService;
/**
* 针对自定义的ShiroSession的db操作
*
* @author yangzz
* @author ruoyi
*/
public class OnlineSessionDAO extends EnterpriseCacheSessionDAO
{

View File

@ -17,7 +17,7 @@ import eu.bitwalker.useragentutils.UserAgent;
/**
* 自定义sessionFactory会话
*
* @author yangzz
* @author ruoyi
*/
@Component
public class OnlineSessionFactory implements SessionFactory

View File

@ -18,8 +18,8 @@ import com.ruoyi.project.system.user.domain.User;
/**
* 自定义访问控制
* @author yangzz
*
*
* @author ruoyi
*/
public class OnlineSessionFilter extends AccessControlFilter
{

View File

@ -12,7 +12,7 @@ import com.ruoyi.project.monitor.online.domain.OnlineSession;
/**
* 同步Session数据到Db
*
* @author yangzz
* @author ruoyi
*/
public class SyncOnlineSessionFilter extends PathMatchingFilter
{

View File

@ -23,7 +23,7 @@ import lombok.extern.slf4j.Slf4j;
/**
* 主要是在此如果会话的属性修改了 就标识下其修改了 然后方便 OnlineSessionDao同步
*
* @author yangzz
* @author ruoyi
*/
@Slf4j
public class OnlineWebSessionManager extends DefaultWebSessionManager

View File

@ -11,7 +11,7 @@ import lombok.extern.slf4j.Slf4j;
/**
* 自定义任务调度器完成
*
* @author yangzz
* @author ruoyi
*/
@Slf4j
public class SpringSessionValidationScheduler implements SessionValidationScheduler

View File

@ -8,7 +8,7 @@ import com.ruoyi.project.system.user.domain.User;
/**
* web层通用数据处理
*
* @author yangzz
* @author ruoyi
*/
public class BaseController
{

View File

@ -6,15 +6,13 @@ import org.apache.ibatis.session.ExecutorType;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionTemplate;
import com.ruoyi.common.exception.base.DaoException;
import lombok.extern.slf4j.Slf4j;
/**
* 数据DAO层通用数据处理
*
* @author yangzz
* @author ruoyi
*/
@Slf4j
public class DynamicObjectBaseDao

View File

@ -6,7 +6,7 @@ import java.util.Map;
/**
* 返回数据通用处理
*
* @author yangzz
* @author ruoyi
*/
public class JSON extends HashMap<String, Object>
{

View File

@ -10,8 +10,7 @@ import lombok.extern.slf4j.Slf4j;
/**
* 自定义异常处理器
*
* @author yangzz
*
* @author ruoyi
*/
@Slf4j
@RestControllerAdvice

View File

@ -5,7 +5,7 @@ import lombok.Data;
/**
* 表格请求参数封装
*
* @author yangzz
* @author ruoyi
*/
@Data
public class PageUtilEntity

View File

@ -6,7 +6,7 @@ import java.util.List;
/**
* 表格分页数据对象
*
* @author yangzz
* @author ruoyi
*/
public class TableDataInfo implements Serializable
{

View File

@ -7,7 +7,7 @@ import com.ruoyi.framework.web.page.PageUtilEntity;
/**
* 表格数据处理
*
* @author yangzz
* @author ruoyi
*/
public class TableSupport
{

View File

@ -0,0 +1,44 @@
package com.ruoyi.project.monitor.logininfor.controller;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import com.ruoyi.framework.web.controller.BaseController;
import com.ruoyi.framework.web.page.PageUtilEntity;
import com.ruoyi.framework.web.page.TableDataInfo;
import com.ruoyi.project.monitor.logininfor.domain.Logininfor;
import com.ruoyi.project.monitor.logininfor.service.ILogininforService;
/**
* 系统访问记录
*
* @author ruoyi
*/
@Controller
@RequestMapping("/monitor/logininfor")
public class LogininforController extends BaseController
{
private String prefix = "monitor/logininfor";
@Autowired
private ILogininforService logininforService;
@GetMapping()
public String logininfor()
{
return prefix + "/logininfor";
}
@GetMapping("/list")
@ResponseBody
public TableDataInfo list()
{
PageUtilEntity pageUtilEntity = this.getPageUtilEntity();
List<Logininfor> list = logininforService.pageInfoQueryLogininfor(pageUtilEntity);
TableDataInfo tableDataInfo = new TableDataInfo(list, pageUtilEntity.getTotalResult());
return tableDataInfo;
}
}

View File

@ -0,0 +1,28 @@
package com.ruoyi.project.monitor.logininfor.dao;
import java.util.List;
import com.ruoyi.framework.web.page.PageUtilEntity;
import com.ruoyi.project.monitor.logininfor.domain.Logininfor;
/**
* 系统访问日志情况信息 数据层
*
* @author ruoyi
*/
public interface ILogininforDao
{
/**
* 新增系统登录日志
*
* @param logininfor 访问日志对象
*/
public void insertLogininfor(Logininfor logininfor);
/**
* 查询系统登录日志集合
*
* @param pageUtilEntity 分页参数
* @return 登录记录集合
*/
public List<Logininfor> pageInfoQuery(PageUtilEntity pageUtilEntity);
}

View File

@ -0,0 +1,49 @@
package com.ruoyi.project.monitor.logininfor.dao;
import java.util.List;
import org.springframework.stereotype.Repository;
import com.ruoyi.framework.web.dao.DynamicObjectBaseDao;
import com.ruoyi.framework.web.page.PageUtilEntity;
import com.ruoyi.project.monitor.logininfor.domain.Logininfor;
/**
* 登录日志记录 数据层
*
* @author ruoyi
*/
@Repository("logininforDao")
public class LogininforDaoImpl extends DynamicObjectBaseDao implements ILogininforDao
{
/**
* 新增系统登录日志
*
* @param logininfor 访问日志对象
*/
@Override
public void insertLogininfor(Logininfor logininfor)
{
this.save("SystemLogininforMapper.insertLogininfor", logininfor);
}
/**
* 查询系统登录日志集合
*
* @param pageUtilEntity 分页参数
* @return 登录记录集合
*/
@Override
public List<Logininfor> pageInfoQuery(PageUtilEntity pageUtilEntity)
{
List<Logininfor> logininforList = null;
try
{
logininforList = this.findForList("SystemLogininforMapper.pageInfoQueryLogininfor", pageUtilEntity);
}
catch (Exception e)
{
e.printStackTrace();
}
return logininforList;
}
}

View File

@ -1,11 +1,13 @@
package com.ruoyi.project.system.logininfor.domain;
package com.ruoyi.project.monitor.logininfor.domain;
import java.util.Date;
import lombok.Data;
/**
* 系统访问日志情况信息 sys_logininfor
*
* @author yangzz
* @author ruoyi
*/
@Data
public class Logininfor
@ -25,6 +27,6 @@ public class Logininfor
/** 提示消息 */
private String msg;
/** 访问时间 */
private String loginTime;
private Date loginTime;
}

View File

@ -0,0 +1,29 @@
package com.ruoyi.project.monitor.logininfor.service;
import java.util.List;
import com.ruoyi.framework.web.page.PageUtilEntity;
import com.ruoyi.project.monitor.logininfor.domain.Logininfor;
/**
* 系统访问日志情况信息 服务层
*
* @author ruoyi
*/
public interface ILogininforService
{
/**
* 新增系统登录日志
*
* @param logininfor 访问日志对象
*/
public void insertLogininfor(Logininfor logininfor);
/**
* 查询系统登录日志集合
*
* @param pageUtilEntity 分页参数
* @return 登录记录集合
*/
public List<Logininfor> pageInfoQueryLogininfor(PageUtilEntity pageUtilEntity);
}

View File

@ -0,0 +1,43 @@
package com.ruoyi.project.monitor.logininfor.service;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.framework.web.page.PageUtilEntity;
import com.ruoyi.project.monitor.logininfor.dao.ILogininforDao;
import com.ruoyi.project.monitor.logininfor.domain.Logininfor;
/**
* 系统访问日志情况信息 服务层处理
*
* @author ruoyi
*/
@Service("logininforService")
public class LogininforServiceImpl implements ILogininforService
{
@Autowired
private ILogininforDao logininforDao;
/**
* 新增系统登录日志
*
* @param logininfor 访问日志对象
*/
@Override
public void insertLogininfor(Logininfor logininfor)
{
logininforDao.insertLogininfor(logininfor);
}
/**
* 查询系统登录日志集合
*
* @param pageUtilEntity 分页参数
* @return 登录记录集合
*/
public List<Logininfor> pageInfoQueryLogininfor(PageUtilEntity pageUtilEntity)
{
return logininforDao.pageInfoQuery(pageUtilEntity);
}
}

View File

@ -24,7 +24,7 @@ import com.ruoyi.project.monitor.online.service.IUserOnlineService;
/**
* 在线用户监控
*
* @author yangzz
* @author ruoyi
*/
@Controller
@RequestMapping("/monitor/online")

View File

@ -6,9 +6,9 @@ import com.ruoyi.framework.web.page.PageUtilEntity;
import com.ruoyi.project.monitor.online.domain.UserOnline;
/**
* 在线用户 服务
* 在线用户 数据
*
* @author yangzz
* @author ruoyi
*/
public interface IUserOnlineDao
{

View File

@ -9,7 +9,7 @@ import com.ruoyi.project.monitor.online.domain.UserOnline;
/**
* 在线用户数据层
*
* @author yangzz
* @author ruoyi
*/
@Repository("userOnlineDao")
public class UserOnlineDaoImpl extends DynamicObjectBaseDao implements IUserOnlineDao

View File

@ -5,7 +5,7 @@ import org.apache.shiro.session.mgt.SimpleSession;
/**
* 在线用户会话属性
*
* @author yangzz
* @author ruoyi
*/
public class OnlineSession extends SimpleSession
{

View File

@ -9,7 +9,7 @@ import lombok.Data;
/**
* 当前在线会话 sys_user_online
*
* @author yangzz
* @author ruoyi
*/
@Data
public class UserOnline

View File

@ -9,7 +9,7 @@ import com.ruoyi.project.monitor.online.domain.UserOnline;
/**
* 在线用户 服务层
*
* @author yangzz
* @author ruoyi
*/
public interface IUserOnlineService
{

View File

@ -14,9 +14,9 @@ import com.ruoyi.project.monitor.online.dao.IUserOnlineDao;
import com.ruoyi.project.monitor.online.domain.UserOnline;
/**
* 在线用户 服务层
* 在线用户 服务层处理
*
* @author yangzz
* @author ruoyi
*/
@Service("userOnlineService")
public class UserOnlineServiceImpl implements IUserOnlineService

View File

@ -5,7 +5,7 @@ import com.ruoyi.project.monitor.operlog.domain.OperLog;
/**
* 操作日志 数据层
*
* @author yangzz
* @author ruoyi
*/
public interface IOperLogDao
{

View File

@ -8,7 +8,7 @@ import com.ruoyi.project.monitor.operlog.domain.OperLog;
/**
* 操作日志记录 数据层
*
* @author yangzz
* @author ruoyi
*/
@Repository("operLogDao")
public class OperLogDaoImpl extends DynamicObjectBaseDao implements IOperLogDao

View File

@ -6,7 +6,7 @@ import lombok.Data;
/**
* 操作日志记录 oper_log
*
* @author yangzz
* @author ruoyi
*/
@Data
public class OperLog

View File

@ -5,7 +5,7 @@ import com.ruoyi.project.monitor.operlog.domain.OperLog;
/**
* 操作日志 服务层
*
* @author yangzz
* @author ruoyi
*/
public interface IOperLogService
{

View File

@ -8,7 +8,7 @@ import com.ruoyi.project.monitor.operlog.domain.OperLog;
/**
* 操作日志 服务层处理
*
* @author yangzz
* @author ruoyi
*/
@Service("operLogService")
public class OperLogServiceImpl implements IOperLogService

View File

@ -5,7 +5,7 @@ import lombok.Data;
/**
* 部门对象 sys_dept
*
* @author yangzz
* @author ruoyi
*/
@Data
public class Dept

View File

@ -1,18 +0,0 @@
package com.ruoyi.project.system.logininfor.dao;
import com.ruoyi.project.system.logininfor.domain.Logininfor;
/**
* 系统访问日志情况信息 数据层
*
* @author y
*/
public interface ILogininforDao
{
/**
* 新增系统登录日志
*
* @param logininfor 访问日志对象
*/
public void insertLogininfor(Logininfor logininfor);
}

View File

@ -1,23 +0,0 @@
package com.ruoyi.project.system.logininfor.dao;
import org.springframework.stereotype.Repository;
import com.ruoyi.framework.web.dao.DynamicObjectBaseDao;
import com.ruoyi.project.system.logininfor.domain.Logininfor;
/**
* 登录日志记录 数据层
*
* @author yangzz
*/
@Repository("logininforDao")
public class LogininforDaoImpl extends DynamicObjectBaseDao implements ILogininforDao
{
@Override
public void insertLogininfor(Logininfor logininfor)
{
this.save("SystemLogininforMapper.insertLogininfor", logininfor);
}
}

View File

@ -1,19 +0,0 @@
package com.ruoyi.project.system.logininfor.service;
import com.ruoyi.project.system.logininfor.domain.Logininfor;
/**
* 系统访问日志情况信息 服务层
*
* @author yangzz
*/
public interface ILogininforService
{
/**
* 新增系统登录日志
*
* @param logininfor 访问日志对象
*/
public void insertLogininfor(Logininfor logininfor);
}

View File

@ -1,30 +0,0 @@
package com.ruoyi.project.system.logininfor.service;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.project.system.logininfor.dao.ILogininforDao;
import com.ruoyi.project.system.logininfor.domain.Logininfor;
/**
* 系统访问日志情况信息 服务层处理
*
* @author yangzz
*/
@Service("logininforService")
public class LogininforServiceImpl implements ILogininforService
{
@Autowired
private ILogininforDao logininforDao;
/**
* 新增系统登录日志
*
* @param logininfor 访问日志对象
*/
@Override
public void insertLogininfor(Logininfor logininfor)
{
logininforDao.insertLogininfor(logininfor);
}
}

View File

@ -6,7 +6,7 @@ import com.ruoyi.project.system.menu.domain.Menu;
/**
* 菜单表 数据层
*
* @author yangzz
* @author ruoyi
*/
public interface IMenuDao
{

View File

@ -9,7 +9,7 @@ import com.ruoyi.project.system.menu.domain.Menu;
/**
* 菜单 数据层处理
*
* @author yangzz
* @author ruoyi
*/
@Repository("menuDao")
public class MenuDaoImpl extends DynamicObjectBaseDao implements IMenuDao

View File

@ -7,7 +7,7 @@ import lombok.Data;
/**
* 角色对象 sys_menu
*
* @author yangzz
* @author ruoyi
*/
@Data
public class Menu

View File

@ -8,7 +8,7 @@ import com.ruoyi.project.system.menu.domain.Menu;
/**
* 菜单 业务层
*
* @author yangzz
* @author ruoyi
*/
public interface IMenuService
{

View File

@ -16,7 +16,7 @@ import com.ruoyi.project.system.menu.domain.Menu;
/**
* 菜单 业务层处理
*
* @author yangzz
* @author ruoyi
*/
@Service("menuService")
public class MenuServiceImpl implements IMenuService

View File

@ -5,7 +5,7 @@ import java.util.List;
/**
* 角色表 数据层
*
* @author yangzz
* @author ruoyi
*/
public interface IRoleDao
{

View File

@ -9,7 +9,7 @@ import com.ruoyi.framework.web.dao.DynamicObjectBaseDao;
/**
* 角色 数据层处理
*
* @author yangzz
* @author ruoyi
*/
@Repository("roleDao")
public class RoleDaoImpl extends DynamicObjectBaseDao implements IRoleDao

View File

@ -5,7 +5,7 @@ import lombok.Data;
/**
* 角色对象 sys_role
*
* @author yangzz
* @author ruoyi
*/
@Data
public class Role

View File

@ -5,7 +5,7 @@ import java.util.Set;
/**
* 角色业务层
*
* @author yangzz
* @author ruoyi
*/
public interface IRoleService
{

View File

@ -12,7 +12,7 @@ import com.ruoyi.project.system.role.dao.IRoleDao;
/**
* 角色 业务层处理
*
* @author yangzz
* @author ruoyi
*/
@Service("roleService")
public class RoleServiceImpl implements IRoleService

View File

@ -14,7 +14,7 @@ import com.ruoyi.project.system.user.domain.User;
/**
* 首页 业务处理
*
* @author yangzz
* @author ruoyi
*/
@Controller
public class IndexController extends BaseController

View File

@ -15,7 +15,7 @@ import com.ruoyi.framework.web.domain.JSON;
/**
* 登录验证
*
* @author yangzz
* @author ruoyi
*/
// @RestController
@Controller

View File

@ -18,7 +18,7 @@ import com.ruoyi.project.system.user.service.IUserService;
/**
* 用户信息
*
* @author yangzz
* @author ruoyi
*/
@Controller
@RequestMapping("/system/user")

View File

@ -8,7 +8,7 @@ import com.ruoyi.project.system.user.domain.User;
/**
* 用户表 数据层
*
* @author yangzz
* @author ruoyi
*/
public interface IUserDao
{

View File

@ -11,7 +11,7 @@ import com.ruoyi.project.system.user.domain.User;
/**
* 用户 数据层处理
*
* @author yangzz
* @author ruoyi
*/
@Repository("userDao")
public class UserDaoImpl extends DynamicObjectBaseDao implements IUserDao

View File

@ -6,7 +6,7 @@ import lombok.Data;
/**
* 用户对象 sys_user
*
* @author yangzz
* @author ruoyi
*/
@Data
public class User

View File

@ -8,7 +8,7 @@ import com.ruoyi.project.system.user.domain.User;
/**
* 用户 业务层
*
* @author yangzz
* @author ruoyi
*/
public interface IUserService
{

View File

@ -11,7 +11,7 @@ import com.ruoyi.project.system.user.domain.User;
/**
* 用户 业务层处理
*
* @author yangzz
* @author ruoyi
*/
@Service("userService")
public class UserServiceImpl implements IUserService

View File

@ -7,8 +7,8 @@ spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driverClassName: com.mysql.jdbc.Driver
#url: jdbc:mysql://10.213.24.45:3306/ry?useUnicode=true&characterEncoding=utf8
url: jdbc:mysql://localhost:3306/ry?useUnicode=true&characterEncoding=utf8
url: jdbc:mysql://10.213.24.45:3306/ry?useUnicode=true&characterEncoding=utf8
#url: jdbc:mysql://localhost:3306/ry?useUnicode=true&characterEncoding=utf8
username: root
password: password
# 初始化大小,最小,最大

View File

@ -12,12 +12,21 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="browser" column="browser" />
<result property="os" column="os" />
<result property="msg" column="msg" />
<result property="logondate" column="logondate" />
<result property="loginTime" column="login_time" />
</resultMap>
<insert id="insertLogininfor" parameterType="Logininfor">
insert into sys_logininfor (login_name, status, ipaddr, browser, os, msg)
values (#{loginName}, #{status}, #{ipaddr}, #{browser}, #{os}, #{msg})
</insert>
<select id="pageInfoQueryLogininfor" parameterType="PageUtilEntity" resultMap="LogininforResult">
select * from sys_logininfor
<where>
<if test="searchValue != null">
AND login_name = #{searchValue}
</if>
</where>
</select>
</mapper>

View File

@ -14,7 +14,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="status" column="status" />
<result property="startTimestamp" column="start_timestsamp" />
<result property="lastAccessTime" column="last_access_time" />
<result property="expireTime" column="expireTime" />
<result property="expireTime" column="expire_time" />
<association property="session" javaType="OnlineSession" resultMap="OnlineSessionResult" />
</resultMap>
@ -32,7 +32,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</select>
<insert id="saveByOnline" parameterType="UserOnline">
replace into sys_user_online(sessionId, login_name, dept_name, ipaddr, browser, os, status, start_timestsamp, last_access_time, expireTime)
replace into sys_user_online(sessionId, login_name, dept_name, ipaddr, browser, os, status, start_timestsamp, last_access_time, expire_time)
values (#{sessionId}, #{loginName}, #{deptName}, #{ipaddr}, #{browser}, #{os}, #{status}, #{startTimestamp}, #{lastAccessTime}, #{expireTime})
</insert>

View File

@ -1,4 +1,8 @@
// 自定义分页处理 ruoyi
/**
* 自定义分页处理
*
* @author ruoyi
*/
// 初始化表格
function initTable(_columns, _url) {

View File

@ -0,0 +1,43 @@
var prefix = "/monitor/logininfor"
$(function() {
var columns = [{
field: 'infoId',
// 列字段名
title: '访问编号' // 列标题
},
{
field: 'loginName',
title: '登录名称'
},
{
field: 'ipaddr',
title: '主机'
},
{
field: 'browser',
title: '浏览器'
},
{
field: 'os',
title: '操作系统'
},
{
field: 'status',
title: '状态',
align: 'center',
formatter: function(value, row, index) {
if (value == 0) {
return '<span class="label label-success">成功</span>';
} else if (value == 1) {
return '<span class="label label-primary">失败</span>';
}
}
},
{
field: 'loginTime',
title: '登录时间'
}];
var url = prefix + "/list";
initTable(columns, url);
});

View File

@ -104,6 +104,7 @@
<div class="panel-body">
<ol>
<li>支持在线用户管理</li>
<li>支持系统访问记录</li>
</ol>
</div>
</div>

View File

@ -0,0 +1,15 @@
<!DOCTYPE html>
<html lang="zh_CN" xmlns:th="http://www.thymeleaf.org"
xmlns:shiro="http://www.pollix.at/thymeleaf/shiro">
<meta charset="utf-8">
<head th:include="include :: header"></head>
<body class="gray-bg">
<div class="wrapper wrapper-content">
<table class="bootstrap-table" data-mobile-responsive="true"
data-sort-name="login_time" data-sort-order="desc">
</table>
</div>
<div th:include="include :: footer"></div>
<script type="text/javascript" src="/ruoyi/monitor/logininfor/logininfor.js"></script>
</body>
</html>