forked from gitee/vben-java
增加在线用户监控
This commit is contained in:
+1
@@ -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;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user