fix 修复 主线程先虚拟线程关闭导致无法获取request问题
This commit is contained in:
@@ -7,6 +7,7 @@ import cn.hutool.core.collection.CollUtil;
|
|||||||
import cn.hutool.core.lang.Opt;
|
import cn.hutool.core.lang.Opt;
|
||||||
import cn.hutool.core.util.ObjectUtil;
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
import com.baomidou.lock.annotation.Lock4j;
|
import com.baomidou.lock.annotation.Lock4j;
|
||||||
|
import jakarta.servlet.http.HttpServletRequest;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import me.zhyd.oauth.model.AuthUser;
|
import me.zhyd.oauth.model.AuthUser;
|
||||||
@@ -136,7 +137,12 @@ public class SysLoginService {
|
|||||||
loginInfoEvent.setUsername(username);
|
loginInfoEvent.setUsername(username);
|
||||||
loginInfoEvent.setStatus(status);
|
loginInfoEvent.setStatus(status);
|
||||||
loginInfoEvent.setMessage(message);
|
loginInfoEvent.setMessage(message);
|
||||||
loginInfoEvent.setRequest(ServletUtils.getRequest());
|
HttpServletRequest request = ServletUtils.getRequest();
|
||||||
|
if (request != null) {
|
||||||
|
loginInfoEvent.setIp(ServletUtils.getClientIP(request));
|
||||||
|
loginInfoEvent.setUserAgent(request.getHeader("User-Agent"));
|
||||||
|
loginInfoEvent.setClientId(request.getHeader(LoginHelper.CLIENT_KEY));
|
||||||
|
}
|
||||||
SpringUtils.context().publishEvent(loginInfoEvent);
|
SpringUtils.context().publishEvent(loginInfoEvent);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
package org.dromara.web.service;
|
package org.dromara.web.service;
|
||||||
|
|
||||||
import cn.hutool.crypto.digest.BCrypt;
|
import cn.hutool.crypto.digest.BCrypt;
|
||||||
|
import jakarta.servlet.http.HttpServletRequest;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import org.dromara.common.core.constant.Constants;
|
import org.dromara.common.core.constant.Constants;
|
||||||
import org.dromara.common.core.constant.GlobalConstants;
|
import org.dromara.common.core.constant.GlobalConstants;
|
||||||
@@ -14,6 +15,7 @@ import org.dromara.common.core.utils.SpringUtils;
|
|||||||
import org.dromara.common.core.utils.StringUtils;
|
import org.dromara.common.core.utils.StringUtils;
|
||||||
import org.dromara.common.log.event.LoginInfoEvent;
|
import org.dromara.common.log.event.LoginInfoEvent;
|
||||||
import org.dromara.common.redis.utils.RedisUtils;
|
import org.dromara.common.redis.utils.RedisUtils;
|
||||||
|
import org.dromara.common.satoken.utils.LoginHelper;
|
||||||
import org.dromara.common.web.config.properties.CaptchaProperties;
|
import org.dromara.common.web.config.properties.CaptchaProperties;
|
||||||
import org.dromara.system.api.model.RegisterBody;
|
import org.dromara.system.api.model.RegisterBody;
|
||||||
import org.dromara.system.domain.SysUser;
|
import org.dromara.system.domain.SysUser;
|
||||||
@@ -103,7 +105,12 @@ public class SysRegisterService {
|
|||||||
loginInfoEvent.setUsername(username);
|
loginInfoEvent.setUsername(username);
|
||||||
loginInfoEvent.setStatus(status);
|
loginInfoEvent.setStatus(status);
|
||||||
loginInfoEvent.setMessage(message);
|
loginInfoEvent.setMessage(message);
|
||||||
loginInfoEvent.setRequest(ServletUtils.getRequest());
|
HttpServletRequest request = ServletUtils.getRequest();
|
||||||
|
if (request != null) {
|
||||||
|
loginInfoEvent.setIp(ServletUtils.getClientIP(request));
|
||||||
|
loginInfoEvent.setUserAgent(request.getHeader("User-Agent"));
|
||||||
|
loginInfoEvent.setClientId(request.getHeader(LoginHelper.CLIENT_KEY));
|
||||||
|
}
|
||||||
SpringUtils.context().publishEvent(loginInfoEvent);
|
SpringUtils.context().publishEvent(loginInfoEvent);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+12
-3
@@ -1,6 +1,5 @@
|
|||||||
package org.dromara.common.log.event;
|
package org.dromara.common.log.event;
|
||||||
|
|
||||||
import jakarta.servlet.http.HttpServletRequest;
|
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
import java.io.Serial;
|
import java.io.Serial;
|
||||||
@@ -34,9 +33,19 @@ public class LoginInfoEvent implements Serializable {
|
|||||||
private String message;
|
private String message;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 请求体
|
* 客户端IP
|
||||||
*/
|
*/
|
||||||
private HttpServletRequest request;
|
private String ip;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 用户代理
|
||||||
|
*/
|
||||||
|
private String userAgent;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 客户端标识
|
||||||
|
*/
|
||||||
|
private String clientId;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 其他参数
|
* 其他参数
|
||||||
|
|||||||
+3
-7
@@ -4,19 +4,16 @@ import cn.hutool.core.util.ObjectUtil;
|
|||||||
import cn.hutool.http.useragent.UserAgent;
|
import cn.hutool.http.useragent.UserAgent;
|
||||||
import cn.hutool.http.useragent.UserAgentUtil;
|
import cn.hutool.http.useragent.UserAgentUtil;
|
||||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
import jakarta.servlet.http.HttpServletRequest;
|
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.dromara.common.core.constant.Constants;
|
import org.dromara.common.core.constant.Constants;
|
||||||
import org.dromara.common.core.domain.PageResult;
|
import org.dromara.common.core.domain.PageResult;
|
||||||
import org.dromara.common.core.utils.MapstructUtils;
|
import org.dromara.common.core.utils.MapstructUtils;
|
||||||
import org.dromara.common.core.utils.ServletUtils;
|
|
||||||
import org.dromara.common.core.utils.StringUtils;
|
import org.dromara.common.core.utils.StringUtils;
|
||||||
import org.dromara.common.core.utils.ip.AddressUtils;
|
import org.dromara.common.core.utils.ip.AddressUtils;
|
||||||
import org.dromara.common.log.event.LoginInfoEvent;
|
import org.dromara.common.log.event.LoginInfoEvent;
|
||||||
import org.dromara.common.mybatis.core.mapper.LambdaCrudChainWrapper;
|
import org.dromara.common.mybatis.core.mapper.LambdaCrudChainWrapper;
|
||||||
import org.dromara.common.mybatis.core.page.PageQuery;
|
import org.dromara.common.mybatis.core.page.PageQuery;
|
||||||
import org.dromara.common.satoken.utils.LoginHelper;
|
|
||||||
import org.dromara.system.domain.SysLoginInfo;
|
import org.dromara.system.domain.SysLoginInfo;
|
||||||
import org.dromara.system.domain.bo.SysLoginInfoBo;
|
import org.dromara.system.domain.bo.SysLoginInfoBo;
|
||||||
import org.dromara.system.domain.vo.SysClientVo;
|
import org.dromara.system.domain.vo.SysClientVo;
|
||||||
@@ -55,11 +52,10 @@ public class SysLoginInfoServiceImpl implements ISysLoginInfoService {
|
|||||||
@Async
|
@Async
|
||||||
@EventListener
|
@EventListener
|
||||||
public void recordLoginInfo(LoginInfoEvent loginInfoEvent) {
|
public void recordLoginInfo(LoginInfoEvent loginInfoEvent) {
|
||||||
HttpServletRequest request = loginInfoEvent.getRequest();
|
UserAgent userAgent = UserAgentUtil.parse(loginInfoEvent.getUserAgent());
|
||||||
UserAgent userAgent = UserAgentUtil.parse(request.getHeader("User-Agent"));
|
String ip = loginInfoEvent.getIp();
|
||||||
String ip = ServletUtils.getClientIP(request);
|
|
||||||
// 客户端信息
|
// 客户端信息
|
||||||
String clientId = request.getHeader(LoginHelper.CLIENT_KEY);
|
String clientId = loginInfoEvent.getClientId();
|
||||||
SysClientVo client = null;
|
SysClientVo client = null;
|
||||||
if (StringUtils.isNotBlank(clientId)) {
|
if (StringUtils.isNotBlank(clientId)) {
|
||||||
client = clientService.queryByClientId(clientId);
|
client = clientService.queryByClientId(clientId);
|
||||||
|
|||||||
Reference in New Issue
Block a user