import java.util.Date;
import javax.servlet.http.HttpServletRequest;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes
/**
* 添加审计日志
*<hr>
* @author hanjidong
* @date 2020年11月6日 上午11:37:00
* @since 0.0.1
*/
@Aspect
@Component
public class AuditLogAcpect {
private Logger logger = LoggerFactory.getLogger(AuditLogAcpect.class);
@Autowired
private AuditLogService auditService;
@Autowired
private Identity identity;
/**
* 定义切入点,切入点为com.sysware.framework.login.handler下的所有函数
*
*<hr>
* @author hanjidong
* @date 2020年11月6日 下午4:59:36
* @since 0.0.1
* void
*/
@Pointcut("execution(* com.sysware.framework.login.handler..*.*(..))")
public void auditLog(){}
/**
* 前置通知:在连接点之前执行的通知
*
*<hr>
* @author hanjidong
* @date 2020年11月6日 下午4:59:29
* @since 0.0.1
* @param joinPoint
* @throws Throwable
* void
*/
@Before("auditLog()")
public void doBefore(JoinPoint joinPoint) throws Throwable {
AuditLog auditLog = new AuditLog();
if (joinPoint.getSignature().getName().equals("onAuthenticationFailure")) {
}
/**
*
*
*<hr>
* @author hanjidong
* @date 2020年11月6日 下午4:59:54
* @since 0.0.1
* @param ret
* @throws Throwable
* void
*/
@AfterReturning(returning = "ret",pointcut = "auditLog()")
public void doAfterReturning(Object ret) throws Throwable {
// 处理完请求,返回内容
logger.info("RESPONSE : " + ret);
}
private void saveAuditLog(AuditLog auditLog) {
ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
HttpServletRequest request = (HttpServletRequest) attributes.getRequest();
String header = request.getHeader("USER-AGENT");
auditLog.setClientInfo(ValidateUtil.isEmpty(header)?"":header);
auditLog.setIpAddress(getRemoteHost(request));
}
/**
* 获取目标主机的ip
* @param request
* @return
*/
private String getRemoteHost(HttpServletRequest request) {
String ip = request.getHeader("x-forwarded-for");
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("Proxy-Client-IP");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("WL-Proxy-Client-IP");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getRemoteAddr();
}
return ip.contains("0:0:0:0:0:0:0:1") ? "127.0.0.1" : ip;
}
}