增加在线用户监控

This commit is contained in:
zsvg
2022-06-13 18:05:58 +08:00
parent 64464b3dbe
commit 795da44935
8 changed files with 89 additions and 10 deletions
@@ -24,6 +24,7 @@ public class GlobalExceptionHandler {
*/
@ExceptionHandler(Throwable.class)
public ResponseEntity<ApiError> handleException(Throwable e){
System.out.println("处理所有不可知的异常");
// 打印堆栈信息
log.error(ThrowableUtil.getStackTrace(e));
return buildResponseEntity(ApiError.error(e.getMessage()));
@@ -31,6 +31,9 @@ public class MonLogLogin {
@Column(length = 64)
private String usession;//取消了session!!!
@Column(length = 64)
private String onkey;//online key
@Column(length = 32)
private String ageos;//客户端操作系统
@@ -40,7 +43,4 @@ public class MonLogLogin {
@Column(length = 512)
private String agdet;//客户端详情
}
@@ -22,7 +22,7 @@ public class MonLogLoginService {
private MonLogLoginRepo repo;
@Async
public void save(Zuser zuser, HttpServletRequest request){
public void save(String onkey,Zuser zuser, HttpServletRequest request){
MonLogLogin logLogin = new MonLogLogin();
logLogin.setId(XstrUtil.getUUID());
@@ -39,6 +39,7 @@ public class MonLogLoginService {
logLogin.setIp(ip);
logLogin.setAddre(XaddressUtil.getRealAddressByIP(ip));
// logLogin.setUsession(request.getSession().getId());
logLogin.setOnkey(onkey);
logLogin.setAgdet(agent);
logLogin.setAgbro(browser.toString());
@@ -0,0 +1,41 @@
package vboot.core.module.mon.online.user;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.web.bind.annotation.*;
import vboot.core.common.api.R;
import vboot.core.common.dao.JdbcDao;
import vboot.core.config.dbx.redis.RedisHandler;
import vboot.core.security.pojo.Zuser;
import vboot.core.xutil.ruoyi.StringUtils;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
@RestController
@RequestMapping("mon/online/user")
public class MonOnlineUserApi {
@Autowired
private RedisHandler redisHandler;
@GetMapping("list")
public R getList() {
List<String> keyList = redisHandler.scan("online-key*");
Collections.reverse(keyList);
String keys="(";
for (String key : keyList) {
keys+="'"+key+"',";
}
keys = keys.substring(0, keys.length() - 1) + ")";
String sql="select * from mon_log_login where onkey in "+keys;
List<OnlineUserDto> list = jdbcDao.getTp().query(sql,
new BeanPropertyRowMapper<>(OnlineUserDto.class));
return R.ok(list);
}
@Autowired
private JdbcDao jdbcDao;
}
@@ -0,0 +1,36 @@
package vboot.core.module.mon.online.user;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.persistence.Column;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class OnlineUserDto {
private String id;
//姓名
private String name;
private String usnam;
private String ip;
private String crtim;
private String addre;
private String ageos;
private String agbro;
private String agdet;
@Column(length = 64)
private String onkey;//online key
}
@@ -70,10 +70,10 @@ public class AuthcApi {
authcService.initZuser(zuser, userDo, backMap);//初始化用户
redisHandler.set(atokenUUID, zuser, appConfig.getJwt().getAtime());//默认8小时过期
redisHandler.set("online-key:"+atokenUUID, zuser, appConfig.getJwt().getAtime());//默认8小时过期
//3.异步方式记录登录日志
monLogLoginService.save(zuser,request);
monLogLoginService.save("online-key:"+atokenUUID,zuser,request);
return R.ok(backMap);
}
@@ -100,7 +100,7 @@ public class AuthcApi {
@GetMapping("/getUserInfo")
public R getUserInfo(Authentication auth, HttpServletRequest request) {
Zuser zuser = (Zuser) auth.getPrincipal();
monLogLoginService.save(zuser,request);
//monLogLoginService.save(zuser,request);
return R.ok(zuser);
}
@@ -120,7 +120,7 @@ public class AuthcApi {
}else{
authcService.initZuser2(zuser, backMap,porid);
}
monLogLoginService.save(zuser,request);
// monLogLoginService.save(zuser,request);
return R.ok(backMap);
}
@@ -35,7 +35,7 @@ public class AuthzFilter extends OncePerRequestFilter {
if (token != null) {
String uuid = jwtHandler.getClaims(token).getId();
// System.out.println("过滤器:uuid:" + uuid);
Zuser zuser = (Zuser) redisHandler.get(uuid);
Zuser zuser = (Zuser) redisHandler.get("online-key:"+uuid);
if (zuser != null) {
UsernamePasswordAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken(zuser, null, zuser.getAuthorities());
authenticationToken.setDetails(new WebAuthenticationDetailsSource().buildDetails(request));
@@ -16,7 +16,7 @@ public class Zuser implements UserDetails, Serializable {
private String id;//用户ID
private String name;//用户名称
private String name;//用户姓名
private Boolean watag;