如果自定义注解需要在controller层使用,需要在spring mvc 配置中加上
<!-- 开启AOP注解扫描 --> <aop:aspectj-autoproxy proxy-target-class="true"/> <!-- 启动自动扫描 --> <context:component-scan base-package="com.longersec.blj.web"/> <context:component-scan base-package="com.longersec.blj.aop"/> package com.longersec.blj.aop.annotation; import java.lang.annotation.*; /** * @author Administrator * @ClassName: MyLog */ @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface MyLog { /**用户操作哪个模块*/ String module() default ""; /**记录用户操作的动作*/ String content() default ""; /**记录用户操作结果*/ String result() default ""; } package com.longersec.blj.aop.aspect; import com.longersec.blj.aop.HttpContextUtils; import com.longersec.blj.aop.annotation.MyLog; import com.longersec.blj.domain.OperatorLog; import com.longersec.blj.domain.User; import com.longersec.blj.service.OperatorLogService; import lombok.extern.slf4j.Slf4j; 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.aspectj.lang.reflect.MethodSignature; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; import java.lang.reflect.Method; import java.net.InetAddress; import java.net.UnknownHostException; import java.util.Arrays; /** * @ClassName: SysLogAspect */ @Aspect @Component @Slf4j public class SysLogAspect { @Autowired private OperatorLogService operatorLogService; /** * 配置织入点(以@MyLog注解为标志) * 只要出现 @MyLog注解都会进入 */ @Pointcut("@annotation(com.longersec.blj.aop.annotation.MyLog)") public void logPointCut(){ } /** * 环绕增强 * @param point * @throws Throwable */ @Around("logPointCut()") public Object around(ProceedingJoinPoint point) throws Throwable { //执行方法 Object result = point.proceed(); //保存日志 try { saveSysLog(point); } catch (Exception e) { log.error("e={}",e); } return result; } /** * 把日志保存 * @param joinPoint * @param time * @return void */ private void saveSysLog(ProceedingJoinPoint joinPoint) { MethodSignature signature = (MethodSignature) joinPoint.getSignature(); Method method = signature.getMethod(); //获取request HttpServletRequest request = HttpContextUtils.getHttpServletRequest(); HttpSession session = request.getSession(); //获取session中的user对象 User users = (User)session.getAttribute("user"); OperatorLog operatorLog = new OperatorLog(); //获取自定义注解的信息 MyLog myLog = method.getAnnotation(MyLog.class); if(myLog != null){ //注解上的描述 operatorLog.setContent(myLog.content()); operatorLog.setModule(myLog.module()); operatorLog.setResult(myLog.result()); } try { //请求的参数 Object[] args = joinPoint.getArgs(); //operatorLog.setDetails(Arrays.toString(args)); } catch (Exception e) { log.error("Exception="+e); } //获取用户信息 operatorLog.setDepartment(users.getDepartment()); operatorLog.setDepartment_id(users.getDepartment()); operatorLog.setUsername(users.getUsername()); operatorLog.setRealname(users.getRealname()); operatorLog.setUser_id(users.getId()); operatorLog.setStatus(users.getStatus()); //当前时间的时间戳 int totalMilliSeconds = (int) (System.currentTimeMillis()/1000); operatorLog.setOperate_datetime(String.valueOf(totalMilliSeconds)); //获取主机ip InetAddress ipAddress = null; String localip = null; try { ipAddress =InetAddress.getLocalHost(); localip = ipAddress.getHostAddress(); } catch (UnknownHostException e) { e.printStackTrace(); } operatorLog.setSource_ip(localip); log.info(operatorLog.toString()); operatorLogService.addOperatorLog(operatorLog); } }