管理登录次数+登录时间的记录

This commit is contained in:
none 2023-02-17 15:13:21 +08:00
parent aed4c60296
commit 9a9226baa3
7 changed files with 114 additions and 28 deletions

View File

@ -2,6 +2,7 @@ package xyz.playedu.api.controller.backend;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestBody;
@ -9,16 +10,20 @@ import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import xyz.playedu.api.constant.SystemConstant; import xyz.playedu.api.constant.SystemConstant;
import xyz.playedu.api.domain.AdminUser; import xyz.playedu.api.domain.AdminUser;
import xyz.playedu.api.event.AdminUserLoginEvent;
import xyz.playedu.api.exception.JwtLogoutException; import xyz.playedu.api.exception.JwtLogoutException;
import xyz.playedu.api.middleware.ImageCaptchaCheckMiddleware; import xyz.playedu.api.middleware.ImageCaptchaCheckMiddleware;
import xyz.playedu.api.request.LoginRequest; import xyz.playedu.api.request.LoginRequest;
import xyz.playedu.api.service.AdminUserService; import xyz.playedu.api.service.AdminUserService;
import xyz.playedu.api.service.JWTService; import xyz.playedu.api.service.JWTService;
import xyz.playedu.api.types.JWTPayload;
import xyz.playedu.api.types.JsonResponse; import xyz.playedu.api.types.JsonResponse;
import xyz.playedu.api.types.JwtToken; import xyz.playedu.api.types.JwtToken;
import xyz.playedu.api.util.HelperUtil; import xyz.playedu.api.util.HelperUtil;
import xyz.playedu.api.util.IpUtil;
import xyz.playedu.api.util.RequestUtil; import xyz.playedu.api.util.RequestUtil;
import java.util.Date;
import java.util.HashMap; import java.util.HashMap;
@Slf4j @Slf4j
@ -32,6 +37,9 @@ public class LoginController {
@Autowired @Autowired
private JWTService jwtService; private JWTService jwtService;
@Autowired
private ApplicationContext applicationContext;
@PostMapping("/login") @PostMapping("/login")
@ImageCaptchaCheckMiddleware @ImageCaptchaCheckMiddleware
public JsonResponse login(@RequestBody @Validated LoginRequest loginRequest) { public JsonResponse login(@RequestBody @Validated LoginRequest loginRequest) {
@ -54,6 +62,8 @@ public class LoginController {
data.put("token", token.getToken()); data.put("token", token.getToken());
data.put("expire", token.getExpire()); data.put("expire", token.getExpire());
applicationContext.publishEvent(new AdminUserLoginEvent(this, adminUser.getId(), new Date(), token.getToken(), IpUtil.getHostIp(), adminUser.getLoginTimes()));
return JsonResponse.data(data); return JsonResponse.data(data);
} }

View File

@ -0,0 +1,31 @@
package xyz.playedu.api.event;
import lombok.Getter;
import lombok.Setter;
import org.springframework.context.ApplicationEvent;
import java.util.Date;
@Getter
@Setter
public class AdminUserLoginEvent extends ApplicationEvent {
private Integer adminId;
private Date loginAt;
private String token;
private String ip;
private Integer loginTimes;
public AdminUserLoginEvent(Object source, Integer adminId, Date loginAt, String token, String ip, Integer loginTimes) {
super(source);
this.adminId = adminId;
this.loginAt = loginAt;
this.token = token;
this.ip = ip;
this.loginTimes = loginTimes;
}
}

View File

@ -0,0 +1,30 @@
package xyz.playedu.api.listener;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.event.EventListener;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
import xyz.playedu.api.event.AdminUserLoginEvent;
import xyz.playedu.api.service.AdminUserService;
@Component
@Slf4j
public class AdminUserLoginListener {
@Autowired
private AdminUserService adminUserService;
@Order(1)
@EventListener
public void updateLoginAtAndTimes(AdminUserLoginEvent event) {
adminUserService.updateLoginTimesAndLoginAt(event.getAdminId(), event.getLoginAt(), event.getLoginTimes() + 1);
}
@Order(10)
@EventListener
public void recordLoginIp(AdminUserLoginEvent event) {
log.info("我执行了:recordLoginIp");
}
}

View File

@ -4,15 +4,16 @@ import org.apache.ibatis.annotations.Mapper;
import xyz.playedu.api.domain.AdminUser; import xyz.playedu.api.domain.AdminUser;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import java.util.Date;
@Mapper @Mapper
/** /**
* @author tengteng * @author tengteng
* @description 针对表admin_users的数据库操作Mapper * @description 针对表admin_users的数据库操作Mapper
* @createDate 2023-02-11 10:58:52 * @createDate 2023-02-11 10:58:52
* @Entity xyz.playedu.api.domain.AdminUser * @Entity xyz.playedu.api.domain.AdminUser
*/ */ public interface AdminUserMapper extends BaseMapper<AdminUser> {
public interface AdminUserMapper extends BaseMapper<AdminUser> { Integer updateLoginAtAndLoginTimes(Integer id, Date loginAt, Integer loginTimes);
} }

View File

@ -5,6 +5,8 @@ import xyz.playedu.api.domain.AdminUser;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import xyz.playedu.api.types.PaginationResult; import xyz.playedu.api.types.PaginationResult;
import java.util.Date;
/** /**
* @author tengteng * @author tengteng
* @description 针对表admin_users的数据库操作Service * @description 针对表admin_users的数据库操作Service
@ -16,4 +18,6 @@ public interface AdminUserService extends IService<AdminUser> {
AdminUser findByEmail(String email); AdminUser findByEmail(String email);
AdminUser findById(Integer id); AdminUser findById(Integer id);
Integer updateLoginTimesAndLoginAt(Integer id, Date loginAt, Integer loginTimes);
} }

View File

@ -11,14 +11,10 @@ import xyz.playedu.api.mapper.AdminUserMapper;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import xyz.playedu.api.types.PaginationResult; import xyz.playedu.api.types.PaginationResult;
/** import java.util.Date;
* @author tengteng
* @description 针对表admin_users的数据库操作Service实现
* @createDate 2023-02-11 10:58:52
*/
@Service @Service
public class AdminUserServiceImpl extends ServiceImpl<AdminUserMapper, AdminUser> public class AdminUserServiceImpl extends ServiceImpl<AdminUserMapper, AdminUser> implements AdminUserService {
implements AdminUserService {
public PaginationResult<AdminUser> paginate(int page, int size, Wrapper<AdminUser> queryWrapper) { public PaginationResult<AdminUser> paginate(int page, int size, Wrapper<AdminUser> queryWrapper) {
IPage<AdminUser> userPage = new Page<>(page, size); IPage<AdminUser> userPage = new Page<>(page, size);
@ -43,6 +39,11 @@ public class AdminUserServiceImpl extends ServiceImpl<AdminUserMapper, AdminUser
queryWrapper.eq("id", id); queryWrapper.eq("id", id);
return this.getBaseMapper().selectOne(queryWrapper); return this.getBaseMapper().selectOne(queryWrapper);
} }
@Override
public Integer updateLoginTimesAndLoginAt(Integer id, Date loginAt, Integer loginTimes) {
return this.getBaseMapper().updateLoginAtAndLoginTimes(id, loginAt, loginTimes);
}
} }

View File

@ -19,9 +19,18 @@
</resultMap> </resultMap>
<sql id="Base_Column_List"> <sql id="Base_Column_List">
id,name,email, id
,name,email,
password,salt,login_ip, password,salt,login_ip,
login_at,is_ban_login,login_times, login_at,is_ban_login,login_times,
created_at,updated_at created_at,updated_at
</sql> </sql>
<update id="updateLoginAtAndLoginTimes">
UPDATE `admin_users`
SET `login_at` = #{loginAt},
`login_times`= #{loginTimes}
where id = #{id}
and `login_times` = ${loginTimes - 1} limit 1
</update>
</mapper> </mapper>