使用 ssm 实现登录日志记录

学习总结

一、基础准备

1. 实现效果

在这里插入图片描述

2. 数据表

2.1 登陆日志信息表

在这里插入图片描述

2.3 员工表

在这里插入图片描述

二、代码实现

1. SysLogLogin 实体类

@Data
public class SysLogLogin {
    /** 主键 */
    private Long id;

    /** 登录用户 */
    private Employee employee;

    /** 登陆时间 */
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date loginTime;

    /** IP地址 */
    private String ipAddress;

}

2. LogAspect AOP切面类

@Aspect
@Component
public class LogAspect {

    @Autowired
    private SysLogLoginMapper sysLogLoginMapper;

    // 在 Controller 中 login() 执行完之后执行这个方法
    // returning:返回值
    @AfterReturning(value = "execution(* *..controller.*.login(..))", returning = "result")
    public void loginLog(Object result) {
        // 获取 HttpServletRequest 对象
        HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder
                .getRequestAttributes()).getRequest();
        // ((JsonResult) result).isSuccess() 这是我写的工具类,你可以根据具体的返回值类型判断是否登录成功
        // 如果登录成功就插入登录日志信息数据
        if (((JsonResult) result).isSuccess()) {
            // 创建日志对象
            SysLogLogin sysLogLogin = new SysLogLogin();
            // 获取 IP 地址
            String addr = request.getRemoteAddr();
            // UserContext.getEmployee() 是我写的一个工具方法,你自己写一个就好了
            // 也就是把员工的数据存入到实体对象的字段上,后面连表查询方便
            sysLogLogin.setEmployee(UserContext.getEmployee());
            sysLogLogin.setLoginTime(new Date());
            sysLogLogin.setIpAddress(addr);
            // 把登录日志信息存到数据库
            sysLogLoginMapper.insert(sysLogLogin);
        }
    }
}

3. SysLogLoginMapper mapper接口

public interface SysLogLoginMapper {
    int insert(SysLogLogin record);
}

4. SysLogLoginMapper.xml 添加的 XML 文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.yy.homework.mapper.SysLogLoginMapper" >
  <resultMap id="BaseResultMap" type="com.yy.homework.domain.SysLogLogin" >
    <id column="id" property="id" />
    <result column="login_time" property="loginTime" />
    <result column="ip_address" property="ipAddress" />

    <result column="e_id" property="employee.id" />
    <result column="e_username" property="employee.username" />
    <result column="e_name" property="employee.name" />
  </resultMap>
  <insert id="insert" useGeneratedKeys="true" keyProperty="id" >
    insert into sys_log_login (employee_id, login_time, ip_address)
    values (#{employee.id}, #{loginTime}, #{ipAddress})
  </insert>
</mapper>

5. applicationContext.xml 添加的 XML 文件

<!-- 包扫描 -->
<context:component-scan base-package="com.yy.homework.aspects"/>
<!-- 配置登陆日志的 AOP 注解-->
<aop:aspectj-autoproxy/>

总结

以上就是使用 ssm 实现登录日志记录的功能了,代码仅供参考,欢迎讨论交流。

posted @ 2021-06-13 21:17  Yan_Yang  阅读(626)  评论(0编辑  收藏  举报