1、日志切面编码

pull/1/head
陈沅 2 years ago
parent 0048b28dd3
commit 09fc9c1df4

@ -0,0 +1,82 @@
package com.sztzjy.forex.trading_trading.annotation.aspect;
import cn.hutool.core.util.URLUtil;
import cn.hutool.extra.servlet.ServletUtil;
import cn.hutool.http.HttpUtil;
import com.sztzjy.forex.trading_trading.annotation.OperateLog;
import com.sztzjy.forex.trading_trading.config.LogRecordEvent;
import com.sztzjy.forex.trading_trading.config.SpringContextHolder;
import com.sztzjy.forex.trading_trading.config.security.JwtUser;
import com.sztzjy.forex.trading_trading.config.security.TokenProvider;
import com.sztzjy.forex.trading_trading.entity.Log;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.Ordered;
import org.springframework.stereotype.Component;
import javax.servlet.http.HttpServletRequest;
/**
*
*
*/
@Aspect
@Slf4j
@Component
public class OperateLogAspect implements Ordered {
@Autowired
private HttpServletRequest request;
@Around("@annotation(operateLog)")
@SneakyThrows
public Object around(ProceedingJoinPoint point, OperateLog operateLog) {
String strClassName = point.getTarget().getClass().getName();
String strMethodName = point.getSignature().getName();
log.debug("[类名]:{},[方法]:{}", strClassName, strMethodName);
Log logRecord = geLog(operateLog.recordParameters(), operateLog.description());
// 发送异步日志事件
Object obj = point.proceed();
SpringContextHolder.publishEvent(new LogRecordEvent(logRecord));
return obj;
}
/**
*
*
* @param recordParameters
* @param description
* @return log
*/
private Log geLog(boolean recordParameters, String description) {
Log logRecord = new Log();
JwtUser curUser = null;
try {
curUser = TokenProvider.getJWTUser(request);
} catch (Exception e) {
logRecord.setOperatorName("匿名");
}
if (curUser != null) {
logRecord.setOperatorId(curUser.getUserId());
logRecord.setOperatorName(curUser.getName());
}
logRecord.setIpAddress(ServletUtil.getClientIP(request));
logRecord.setAction(URLUtil.getPath(request.getRequestURI()));
logRecord.setUserAgent(request.getHeader("user-agent"));
logRecord.setDescription(description);
if (recordParameters) {
logRecord.setParams(HttpUtil.toParams(request.getParameterMap()));
}
return logRecord;
}
@Override
public int getOrder() {
return Ordered.HIGHEST_PRECEDENCE + 1;
}
}

@ -0,0 +1,14 @@
package com.sztzjy.forex.trading_trading.config;
import org.springframework.context.ApplicationEvent;
/**
*
*
*/
public class LogRecordEvent extends ApplicationEvent {
private static final long serialVersionUID = -7520983571492156143L;
public LogRecordEvent(Object source) {
super(source);
}
}

@ -1,6 +1,17 @@
package com.sztzjy.forex.trading_trading.config.security;
import com.google.common.collect.Lists;
import com.sztzjy.forex.trading_trading.config.Constant;
import com.sztzjy.forex.trading_trading.config.exception.UnAuthorizedException;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import javax.servlet.http.HttpServletRequest;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
@Component
public class TokenProvider {
@ -12,9 +23,32 @@ public class TokenProvider {
* @return jwt
*/
public JwtUser getClaims(String jwtToken) {
public static JwtUser getClaims(String jwtToken) {
//todo 解析用户token
return null;
}
public static JwtUser getJWTUser(HttpServletRequest request) {
if (!(request.getUserPrincipal() instanceof UsernamePasswordAuthenticationToken)) {
throw new UnAuthorizedException("身份认证失败");
}
String jwtToken = request.getHeader(Constant.AUTHORIZATION);
if (StringUtils.hasText(jwtToken)) {
return getJWTUser(jwtToken);
}
throw new UnAuthorizedException("身份认证失败");
}
public static JwtUser getJWTUser(String tokenValue) {
try {
JwtUser principal = getClaims(tokenValue);
return principal;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
}

Loading…
Cancel
Save