pom包:
<properties>
<project.build.sourceEncoding>utf-8</project.build.sourceEncoding>
<spring.version>4.3.8.RELEASE</spring.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
</dependency>
</dependencies>
<!-- spring-framework-bom -->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-framework-bom</artifactId>
<version>${spring.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
切面:
package com.rz.commons.scan;
import java.util.Enumeration;
import javax.servlet.http.HttpServletRequest;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.subject.PrincipalCollection;
import org.apache.shiro.subject.Subject;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import com.rz.commons.utils.DateUtils;
import com.rz.commons.utils.StringUtils;
import com.rz.model.SysLog;
/**
* @description:AOP 日誌
*/
@Aspect
@Component
@Order
public class SysLogAspect {
private static final Logger LOGGER = LogManager.getLogger(SysLogAspect.class);
// @Autowired
// private ISysLogService sysLogService;
@Pointcut("within(@org.springframework.stereotype.Controller *)")
public void cutController() {}
@SuppressWarnings("unchecked")
@Around("cutController()")
public Object recordSysLog(ProceedingJoinPoint point) throws Throwable {
String strMethodName = point.getSignature().getName();
String strClassName = point.getTarget().getClass().getName();
Object[] params = point.getArgs();
StringBuffer bfParams = new StringBuffer();
Enumeration<String> paraNames = null;
HttpServletRequest request = null;
if (params != null && params.length > 0) {
request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
paraNames = request.getParameterNames();
String key;
String value;
while (paraNames.hasMoreElements()) {
key = paraNames.nextElement();
value = request.getParameter(key);
bfParams.append(key).append("=").append(value).append("&");
}
if (StringUtils.isBlank(bfParams)) {
bfParams.append(request.getQueryString());
}
}
String strMessage = String
.format("[類名]:%s,[方法]:%s,[參數]:%s", strClassName, strMethodName, bfParams.toString());
// LOGGER.info(strMessage);
if (isWriteLog(strMethodName)) {
try {
Subject currentUser = SecurityUtils.getSubject();
PrincipalCollection collection = currentUser.getPrincipals();
if (null != collection) {
String loginName = collection.getPrimaryPrincipal().toString();
SysLog sysLog = new SysLog();
sysLog.setLoginName(loginName);
sysLog.setRoleName(loginName);
sysLog.setOptContent(strMessage);
sysLog.setCreateTime(DateUtils.getNowTimeStamp());
if (request != null) {
sysLog.setClientIp(request.getRemoteAddr());
}
LOGGER.info(sysLog.toString());
// sysLogService.insert(sysLog);
}
} catch (Exception e) {
LOGGER.error(e.getMessage(), e);
}
}
return point.proceed();
}
private boolean isWriteLog(String method) {
if (method.equals("ueditor")) {
return false;
}
String[] pattern = {"login", "logout", "add" , "insert", "edit","update" , "delete", "grant"};
for (String s : pattern) {
if (method.indexOf(s) > -1) {
return true;
}
}
return false;
}
}