From 795da44935f40a03dc42cf50149342a45477486f Mon Sep 17 00:00:00 2001 From: zsvg <8680782@qq.com> Date: Mon, 13 Jun 2022 18:05:58 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=9C=A8=E7=BA=BF=E7=94=A8?= =?UTF-8?q?=E6=88=B7=E7=9B=91=E6=8E=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../handler/GlobalExceptionHandler.java | 1 + .../module/mon/log/login/MonLogLogin.java | 6 +-- .../mon/log/login/MonLogLoginService.java | 3 +- .../mon/online/user/MonOnlineUserApi.java | 41 +++++++++++++++++++ .../module/mon/online/user/OnlineUserDto.java | 36 ++++++++++++++++ .../vboot/core/security/authc/AuthcApi.java | 8 ++-- .../core/security/authz/AuthzFilter.java | 2 +- .../java/vboot/core/security/pojo/Zuser.java | 2 +- 8 files changed, 89 insertions(+), 10 deletions(-) create mode 100644 vboot-core/src/main/java/vboot/core/module/mon/online/user/MonOnlineUserApi.java create mode 100644 vboot-core/src/main/java/vboot/core/module/mon/online/user/OnlineUserDto.java diff --git a/vboot-core/src/main/java/vboot/core/common/exception/handler/GlobalExceptionHandler.java b/vboot-core/src/main/java/vboot/core/common/exception/handler/GlobalExceptionHandler.java index ae0e2d9..314866f 100644 --- a/vboot-core/src/main/java/vboot/core/common/exception/handler/GlobalExceptionHandler.java +++ b/vboot-core/src/main/java/vboot/core/common/exception/handler/GlobalExceptionHandler.java @@ -24,6 +24,7 @@ public class GlobalExceptionHandler { */ @ExceptionHandler(Throwable.class) public ResponseEntity handleException(Throwable e){ + System.out.println("处理所有不可知的异常"); // 打印堆栈信息 log.error(ThrowableUtil.getStackTrace(e)); return buildResponseEntity(ApiError.error(e.getMessage())); diff --git a/vboot-core/src/main/java/vboot/core/module/mon/log/login/MonLogLogin.java b/vboot-core/src/main/java/vboot/core/module/mon/log/login/MonLogLogin.java index 72d0da2..156ee95 100644 --- a/vboot-core/src/main/java/vboot/core/module/mon/log/login/MonLogLogin.java +++ b/vboot-core/src/main/java/vboot/core/module/mon/log/login/MonLogLogin.java @@ -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;//客户端详情 - - - } diff --git a/vboot-core/src/main/java/vboot/core/module/mon/log/login/MonLogLoginService.java b/vboot-core/src/main/java/vboot/core/module/mon/log/login/MonLogLoginService.java index 871c655..b488e65 100644 --- a/vboot-core/src/main/java/vboot/core/module/mon/log/login/MonLogLoginService.java +++ b/vboot-core/src/main/java/vboot/core/module/mon/log/login/MonLogLoginService.java @@ -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()); diff --git a/vboot-core/src/main/java/vboot/core/module/mon/online/user/MonOnlineUserApi.java b/vboot-core/src/main/java/vboot/core/module/mon/online/user/MonOnlineUserApi.java new file mode 100644 index 0000000..f13ad5a --- /dev/null +++ b/vboot-core/src/main/java/vboot/core/module/mon/online/user/MonOnlineUserApi.java @@ -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 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 list = jdbcDao.getTp().query(sql, + new BeanPropertyRowMapper<>(OnlineUserDto.class)); + return R.ok(list); + } + + @Autowired + private JdbcDao jdbcDao; + +} diff --git a/vboot-core/src/main/java/vboot/core/module/mon/online/user/OnlineUserDto.java b/vboot-core/src/main/java/vboot/core/module/mon/online/user/OnlineUserDto.java new file mode 100644 index 0000000..c97d9a2 --- /dev/null +++ b/vboot-core/src/main/java/vboot/core/module/mon/online/user/OnlineUserDto.java @@ -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 + +} diff --git a/vboot-core/src/main/java/vboot/core/security/authc/AuthcApi.java b/vboot-core/src/main/java/vboot/core/security/authc/AuthcApi.java index 654f738..8c4daf4 100644 --- a/vboot-core/src/main/java/vboot/core/security/authc/AuthcApi.java +++ b/vboot-core/src/main/java/vboot/core/security/authc/AuthcApi.java @@ -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); } diff --git a/vboot-core/src/main/java/vboot/core/security/authz/AuthzFilter.java b/vboot-core/src/main/java/vboot/core/security/authz/AuthzFilter.java index 5dec31b..20e884d 100644 --- a/vboot-core/src/main/java/vboot/core/security/authz/AuthzFilter.java +++ b/vboot-core/src/main/java/vboot/core/security/authz/AuthzFilter.java @@ -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)); diff --git a/vboot-core/src/main/java/vboot/core/security/pojo/Zuser.java b/vboot-core/src/main/java/vboot/core/security/pojo/Zuser.java index 842f46a..d30d1c8 100644 --- a/vboot-core/src/main/java/vboot/core/security/pojo/Zuser.java +++ b/vboot-core/src/main/java/vboot/core/security/pojo/Zuser.java @@ -16,7 +16,7 @@ public class Zuser implements UserDetails, Serializable { private String id;//用户ID - private String name;//用户名称 + private String name;//用户姓名 private Boolean watag;