JAVA全系列 教程
3762个小节阅读:7088.5k
C语言快速入门
JAVA全系列 教程
面向对象的程序设计语言
Python全系列 教程
Python3.x版本,未来主流的版本
人工智能 教程
顺势而为,AI创新未来
大厂算法 教程
算法,程序员自我提升必经之路
C++ 教程
一门通用计算机编程语言
微服务 教程
目前业界流行的框架组合
web前端全系列 教程
通向WEB技术世界的钥匙
大数据全系列 教程
站在云端操控万千数据
AIGC全能工具班
A A
White Night
记录用户登录时间、用户名、登录ip、登录类型等信息。
序号 | 接口名称 | 接口地址 | 请求类型 |
---|---|---|---|
1 | 分页查询登录日志 | /system/loginInfo/listForPage | get |
2 | 删除登录日志 | /system/loginInfo/deleteLoginInfoByIds/{infoIds} | delete |
3 | 清空登录日志 | /system/loginInfo/clearLoginInfo | delete |
请求参数
参数名称 | 是否必须 |
---|---|
userName | 是 |
ipAddr | 是 |
loginAccount | 是 |
loginStatus | 是 |
beginTime | 是 |
endTime | 是 |
pageNum | 是 |
pageSize | 是 |
返回数据,JSON类型
名称 | 类型 | 其他信息 |
---|---|---|
total | int | |
code | int | |
msg | String | |
data | object [] | item 类型: object |
├─ infoId | int | |
├─ userName | String | |
├─ loginAccount | String | |
├─ ipAddr | String | |
├─ loginLocation | String | |
├─ browser | String | |
├─ os | String | |
├─ loginStatus | String | |
├─ loginType | String | |
├─ msg | String | |
├─ loginTime | String |
实体类LogInfo【system-domain】,值对象LogInfoDto
xxxxxxxxxx
package com.bjsxt.dto;
import ...
/**
*
*/
/**
* 系统访问记录
*/
value="com-bjsxt-dto-LoginInfoDto") (
callSuper=true) (
public class LoginInfoDto extends BaseDto {
/**
* 用户名称
*/
value="用户名称") (
private String userName;
/**
* 登陆账号
*/
value="登陆账号") (
private String loginAccount;
/**
* 登录IP地址
*/
value="登录IP地址") (
private String ipAddr;
/**
* 登录状态(0成功 1失败)字典表
*/
value="登录状态(0成功 1失败)字典表") (
private String loginStatus;
/**
* 登陆类型0系统用户1患者用户 字典表
*/
value="登陆类型0系统用户1患者用户 字典表") (
private String loginType;
}
生成Mapper接口和xml文件
xxxxxxxxxx
package com.bjsxt.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.bjsxt.domain.LoginInfo;
/**
*
*/
public interface LoginInfoMapper extends BaseMapper<LoginInfo> {
}
xxxxxxxxxx
<mapper namespace="com.bjsxt.mapper.LoginInfoMapper">
<resultMap id="BaseResultMap" type="com.bjsxt.domain.LoginInfo">
<!--@mbg.generated-->
<!--@Table sys_login_info-->
<id column="info_id" jdbcType="BIGINT" property="infoId" />
<result column="user_name" jdbcType="VARCHAR" property="userName" />
<result column="login_account" jdbcType="VARCHAR" property="loginAccount" />
<result column="ip_addr" jdbcType="VARCHAR" property="ipAddr" />
<result column="login_location" jdbcType="VARCHAR" property="loginLocation" />
<result column="browser" jdbcType="VARCHAR" property="browser" />
<result column="os" jdbcType="VARCHAR" property="os" />
<result column="login_status" jdbcType="CHAR" property="loginStatus" />
<result column="login_type" jdbcType="CHAR" property="loginType" />
<result column="msg" jdbcType="VARCHAR" property="msg" />
<result column="login_time" jdbcType="TIMESTAMP" property="loginTime" />
</resultMap>
<sql id="Base_Column_List">
<!--@mbg.generated-->
info_id, user_name, login_account, ip_addr, login_location, browser, os, login_status,
login_type, msg, login_time
</sql>
</mapper>
xxxxxxxxxx
package com.bjsxt.service;
import com.bjsxt.domain.LoginInfo;
import com.baomidou.mybatisplus.extension.service.IService;
import com.bjsxt.dto.LoginInfoDto;
import com.bjsxt.vo.DataGridView;
/**
*
*/
public interface LoginInfoService {
/**
* 添加
*
* @param loginInfo
* @return
*/
int insertLoginInfo(LoginInfo loginInfo);
/**
* 分页查询
*
* @param loginInfoDto
* @return
*/
DataGridView listForPage(LoginInfoDto loginInfoDto);
}
实现类
xxxxxxxxxx
package com.bjsxt.service.impl;
import ...
/**
*
*/
public class LoginInfoServiceImpl implements LoginInfoService{
private LoginInfoMapper loginInfoMapper;
public int insertLoginInfo(LoginInfo loginInfo) {
return this.loginInfoMapper.insert(loginInfo);
}
public DataGridView listForPage(LoginInfoDto loginInfoDto) {
Page<LoginInfo> page=new Page<>(loginInfoDto.getPageNum(),loginInfoDto.getPageSize());
QueryWrapper<LoginInfo> qw=new QueryWrapper<>();
qw.like(StringUtils.isNotBlank(loginInfoDto.getUserName()),LoginInfo.COL_USER_NAME,loginInfoDto.getUserName());
qw.like(StringUtils.isNotBlank(loginInfoDto.getIpAddr()),LoginInfo.COL_IP_ADDR,loginInfoDto.getIpAddr());
qw.like(StringUtils.isNotBlank(loginInfoDto.getLoginAccount()),LoginInfo.COL_LOGIN_ACCOUNT,loginInfoDto.getLoginAccount());
qw.eq(StringUtils.isNotBlank(loginInfoDto.getLoginStatus()),LoginInfo.COL_LOGIN_STATUS,loginInfoDto.getLoginStatus());
qw.eq(StringUtils.isNotBlank(loginInfoDto.getLoginType()),LoginInfo.COL_LOGIN_TYPE,loginInfoDto.getLoginType());
qw.ge(null!= loginInfoDto.getBeginTime(), LoginInfo.COL_LOGIN_TIME, loginInfoDto.getBeginTime());
qw.le(null!= loginInfoDto.getEndTime(), LoginInfo.COL_LOGIN_TIME, loginInfoDto.getEndTime());
qw.orderByDesc(LoginInfo.COL_LOGIN_TIME);
this.loginInfoMapper.selectPage(page,qw);
return new DataGridView(page.getTotal(),page.getRecords());
}
public int deleteLoginInfoByIds(Long[] infoIds) {
List<Long> ids = Arrays.asList(infoIds);
if(ids.size()>0){
return this.loginInfoMapper.deleteBatchIds(ids);
}
return 0;
}
public int clearLoginInfo() {
return this.loginInfoMapper.delete(null);
}
}
xxxxxxxxxx
package com.bjsxt.controller.system;
import ...
/**
*
*/
"system/loginInfo") (
public class LoginInfoController {
private LoginInfoService loginInfoService;
/**
* 分页查询
*/
"listForPage") (
public AjaxResult listForPage(LoginInfoDto loginInfoDto){
DataGridView gridView = loginInfoService.listForPage(loginInfoDto);
return AjaxResult.success("查询成功",gridView.getData(),gridView.getTotal());
}
}
修改登录方法,用户登录后插入登录日志
xxxxxxxxxx
/**
* 登录方法
*
* @return 结果
*/
"login/doLogin") (
public AjaxResult login( LoginBodyDto loginBodyDto, HttpServletRequest request) {
AjaxResult ajax = AjaxResult.success();
String username = loginBodyDto.getUsername();
String password = loginBodyDto.getPassword();
//构造用户名和密码的token
UsernamePasswordToken token = new UsernamePasswordToken(username, password);
Subject subject = SecurityUtils.getSubject();
//封装LoginInfo
LoginInfo loginInfo=createLoginInfo(request);
loginInfo.setLoginAccount(loginBodyDto.getUsername());
try {
subject.login(token);
//得到会话的token==也就是redis里面存的
Serializable webToken = subject.getSession().getId();
ajax.put(Constants.TOKEN,webToken);
//说明登陆成功
loginInfo.setMsg("登陆成功");
loginInfo.setLoginStatus(Constants.LOGIN_SUCCESS);
loginInfo.setUserName(ShiroSecurityUtils.getCurrentUserName());
} catch (Exception e) {
log.error("用户名或密码不正确", e);
ajax = AjaxResult.error(HttpStatus.ERROR, "用户名或密码不正确");
loginInfo.setMsg("用户名或密码不正确");
loginInfo.setLoginStatus(Constants.LOGIN_ERROR);
}
//保存登陆信息到数据库
loginInfoService.insertLoginInfo(loginInfo);
return ajax;
}
分页查询 /system/loginInfo/listForPage
请求参数
无
返回数据
名称 | 类型 |
---|---|
msg | String |
code | int |
LogInfo、LogInfoDto不变
LoginInfoMapper,LogInfoMapper.xml不变
LoginInfoService中增加deleteLoginInfoByIds方法
xxxxxxxxxx
package com.bjsxt.service;
import com.bjsxt.domain.LoginInfo;
import com.baomidou.mybatisplus.extension.service.IService;
import com.bjsxt.dto.LoginInfoDto;
import com.bjsxt.vo.DataGridView;
/**
*
*/
public interface LoginInfoService {
/**
* 添加
*
* @param loginInfo
* @return
*/
int insertLoginInfo(LoginInfo loginInfo);
/**
* 分页查询
*
* @param loginInfoDto
* @return
*/
DataGridView listForPage(LoginInfoDto loginInfoDto);
/**
* 删除登陆日志
*
* @param infoIds
* @return
*/
int deleteLoginInfoByIds(Long[] infoIds);
}
在LogInfoService中增加删除方法的实现
xxxxxxxxxx
package com.itbaizhan.service.impl;
import ...
/**
*
*/
public class LoginInfoServiceImpl implements LoginInfoService{
private LoginInfoMapper loginInfoMapper;
public int insertLoginInfo(LoginInfo loginInfo) {
return this.loginInfoMapper.insert(loginInfo);
}
public DataGridView listForPage(LoginInfoDto loginInfoDto) {
Page<LoginInfo> page=new Page<>(loginInfoDto.getPageNum(),loginInfoDto.getPageSize());
QueryWrapper<LoginInfo> qw=new QueryWrapper<>();
qw.like(StringUtils.isNotBlank(loginInfoDto.getUserName()),LoginInfo.COL_USER_NAME,loginInfoDto.getUserName());
qw.like(StringUtils.isNotBlank(loginInfoDto.getIpAddr()),LoginInfo.COL_IP_ADDR,loginInfoDto.getIpAddr());
qw.like(StringUtils.isNotBlank(loginInfoDto.getLoginAccount()),LoginInfo.COL_LOGIN_ACCOUNT,loginInfoDto.getLoginAccount());
qw.eq(StringUtils.isNotBlank(loginInfoDto.getLoginStatus()),LoginInfo.COL_LOGIN_STATUS,loginInfoDto.getLoginStatus());
qw.eq(StringUtils.isNotBlank(loginInfoDto.getLoginType()),LoginInfo.COL_LOGIN_TYPE,loginInfoDto.getLoginType());
qw.ge(null!= loginInfoDto.getBeginTime(), LoginInfo.COL_LOGIN_TIME, loginInfoDto.getBeginTime());
qw.le(null!= loginInfoDto.getEndTime(), LoginInfo.COL_LOGIN_TIME, loginInfoDto.getEndTime());
qw.orderByDesc(LoginInfo.COL_LOGIN_TIME);
this.loginInfoMapper.selectPage(page,qw);
return new DataGridView(page.getTotal(),page.getRecords());
}
public int deleteLoginInfoByIds(Long[] infoIds) {
List<Long> ids = Arrays.asList(infoIds);
if(ids.size()>0){
return this.loginInfoMapper.deleteBatchIds(ids);
}
return 0;
}
}
LogInfoController中增加deleteLoginInfoByIds方法
xxxxxxxxxx
package com.bjsxt.controller.system;
import ...
/**
*
*/
"system/loginInfo") (
public class LoginInfoController {
private LoginInfoService loginInfoService;
/**
* 分页查询
*/
"listForPage") (
public AjaxResult listForPage(LoginInfoDto loginInfoDto){
DataGridView gridView = loginInfoService.listForPage(loginInfoDto);
return AjaxResult.success("查询成功",gridView.getData(),gridView.getTotal());
}
/**
* 删除
*/
"deleteLoginInfoByIds/{infoIds}") (
public AjaxResult deleteLoginInfoByIds( Long[] infoIds){
return AjaxResult.toAjax(this.loginInfoService.deleteLoginInfoByIds(infoIds));
}
}
删除/system/loginInfo/deleteLoginInfoByIds/{infoIds}
请求参数
无
返回数据,JSON类型
名称 | 类型 | 是否必须 |
---|---|---|
msg | String | 非必须 |
code | int | 非必须 |
LogInfo、LogInfoDto不变
LoginInfoMapper,LogInfoMapper.xml不变
LogInfoService中增加clearLoginInfo方法
xxxxxxxxxx
package com.bjsxt.service;
import com.bjsxt.domain.LoginInfo;
import com.baomidou.mybatisplus.extension.service.IService;
import com.bjsxt.dto.LoginInfoDto;
import com.bjsxt.vo.DataGridView;
/**
*
*/
public interface LoginInfoService {
/**
* 添加
*
* @param loginInfo
* @return
*/
int insertLoginInfo(LoginInfo loginInfo);
/**
* 分页查询
*
* @param loginInfoDto
* @return
*/
DataGridView listForPage(LoginInfoDto loginInfoDto);
/**
* 删除登陆日志
*
* @param infoIds
* @return
*/
int deleteLoginInfoByIds(Long[] infoIds);
/**
* 清空登陆日志
*
* @return
*/
int clearLoginInfo();
}
xxxxxxxxxx
package com.bjsxt.controller.system;
import ...
/**
*
*/
"system/loginInfo") (
public class LoginInfoController {
private LoginInfoService loginInfoService;
/**
* 分页查询
*/
"listForPage") (
public AjaxResult listForPage(LoginInfoDto loginInfoDto){
DataGridView gridView = loginInfoService.listForPage(loginInfoDto);
return AjaxResult.success("查询成功",gridView.getData(),gridView.getTotal());
}
/**
* 删除
*/
"deleteLoginInfoByIds/{infoIds}") (
public AjaxResult deleteLoginInfoByIds( Long[] infoIds){
return AjaxResult.toAjax(this.loginInfoService.deleteLoginInfoByIds(infoIds));
}
/**
* 清空删除
*/
"clearLoginInfo") (
public AjaxResult clearLoginInfo(){
return AjaxResult.toAjax(this.loginInfoService.clearLoginInfo());
}
}
清空/system/loginInfo/clearLoginInfo