spring AOP annotation 实现日志服务

    技术2022-06-27  117

    package com.sumavision.bnadmin.util;

    import java.lang.annotation.Documented;import java.lang.annotation.ElementType;import java.lang.annotation.Inherited;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target;

    /** * <p> * 关于<b>Action</b>的说明 * </p> * 类的方法描述注解 *  * @author gavin * @version 1.0 * @since BN-Admin 1.0 *  */@Target(ElementType.METHOD)@Retention(RetentionPolicy.RUNTIME)@Documented@Inheritedpublic @interface LogAction { public String servicename() default "no servicename"; public String methodname() default "no methodname"; public String description() default "no description";}

    -----------------------------------------华丽的分割线--------------------------------------------

     

    package com.sumavision.bnadmin.util;

    import java.lang.reflect.Method;import java.util.Date;

    import javax.annotation.Resource;

    import org.apache.commons.lang.StringUtils;import org.apache.commons.logging.Log;import org.apache.commons.logging.LogFactory;import org.apache.struts2.ServletActionContext;import org.aspectj.lang.ProceedingJoinPoint;import org.aspectj.lang.annotation.Around;import org.aspectj.lang.annotation.Aspect;

    import com.sumavision.bnadmin.admin.service.UseroperateService;import com.sumavision.bnadmin.domain.entity.BnUseroperate;

    /** * <p> * 关于<b>LogAspect</b>的说明 * </p> * 服务日志 *  * @author gavin * @version 1.0 * @since BN-Admin 1.0 *  */@Aspectpublic class LogAspect {

     /**  * <p>  * 属性useroperateService  * </p>  * 服务日志维护服务  */ @Resource private UseroperateService useroperateService;

     public UseroperateService getUseroperateService() {  return useroperateService; }

     public void setUseroperateService(UseroperateService useroperateService) {  this.useroperateService = useroperateService; }

     private Log logger = LogFactory.getLog(LogAspect.class);  @Around("execution(* com.sumavision.bnadmin.admin.web..*(..))")  public Object doSystemLog(ProceedingJoinPoint point) throws Throwable {  Object retVal = point.proceed();

      String methodName = point.getSignature().getName();

      // 目标方法不为空  if (StringUtils.isNotEmpty(methodName)) {   // set与get方法除外   if (!(methodName.startsWith("set") || methodName.startsWith("get"))) {

        Class targetClass = point.getTarget().getClass();    Method method = targetClass.getMethod(methodName);

        if (method != null) {

         boolean hasAnnotation = method       .isAnnotationPresent(LogAction.class);

         if (hasAnnotation) {      LogAction annotation = method.getAnnotation(LogAction.class);

          String servicename = annotation.servicename();      String methodname = annotation.methodname();      String description = annotation.description();      if (logger.isDebugEnabled()) {       logger.debug("Action method:" + method.getName()         + " Description:" + description);      }      // 取到当前的操作用户      String j_username = (String) ServletActionContext        .getServletContext().getAttribute("j_username");      if (j_username != null) {       try {//调用服务将信息记录到数据库        BnUseroperate useroperate = new BnUseroperate();        useroperate.setUsername(j_username);        useroperate.setServicemethodname(methodname);        useroperate.setServicename(servicename);        useroperate.setLastedittime(new Date());        useroperate.setDescription(description);

            useroperateService.addUseroperate(useroperate);       } catch (Exception e) {        e.printStackTrace();       }      }     }    }   }  }  return retVal; }}

    -----------------------------------------优雅的分割线--------------------------------------------

     

    @LogAction(servicename="登录",methodname="login",description="管理员登录") public String login() {  ServletActionContext.getServletContext().setAttribute("j_username", j_username);  try {   String encodePassword = passwordEncoder.encodePassword(j_password, null);      boolean login_error = userService.login(j_username, encodePassword);      ServletActionContext.getRequest().setAttribute("login_error", login_error);      if (false == login_error) {       return ERROR;      }  } catch (Exception e) {   e.printStackTrace();   return ERROR;  }  return SUCCESS; } 

     


    最新回复(0)