java 日志操作日志_后台管理系统之系统操作日志开发(Java实现)

packagecom.ideal.manage.guest.service.log;importcom.alibaba.fastjson.JSONObject;importcom.ideal.manage.guest.bean.DTO.PageDto;importcom.ideal.manage.guest.bean.log.Log;importcom.ideal.manage.guest.config.shiro.MyShiroRealm;importcom.ideal.manage.guest.repository.framework.MySpecification;importcom.ideal.manage.guest.repository.framework.SpecificationOperator;importcom.ideal.manage.guest.repository.log.LogRepository;importcom.ideal.manage.guest.util.Const;importcom.ideal.manage.guest.util.HttpRequests;importcom.ideal.manage.guest.util.IPUtils;/*import org.apache.ibatis.javassist.*;

import org.apache.ibatis.javassist.bytecode.CodeAttribute;

import org.apache.ibatis.javassist.bytecode.LocalVariableAttribute;

import org.apache.ibatis.javassist.bytecode.MethodInfo;*/

import javassist.*;importjavassist.bytecode.CodeAttribute;importjavassist.bytecode.LocalVariableAttribute;importjavassist.bytecode.MethodInfo;importorg.apache.shiro.SecurityUtils;importorg.aspectj.lang.JoinPoint;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.data.domain.Page;importorg.springframework.data.domain.PageRequest;importorg.springframework.data.domain.Pageable;importorg.springframework.data.domain.Sort;importorg.springframework.stereotype.Service;importorg.springframework.util.CollectionUtils;importorg.springframework.util.StringUtils;importorg.springframework.web.context.request.RequestContextHolder;importorg.springframework.web.context.request.ServletRequestAttributes;importjavax.servlet.http.HttpServletRequest;importjava.util.HashMap;importjava.util.Iterator;importjava.util.List;importjava.util.Map;/***

* 服务实现类

*

*

*@author*@since2017-09-05*/@Servicepublic classLogService{private static final String LOG_CONTENT = "[类名]:%s,[方法]:%s,[参数]:%s,[IP]:%s";privateString username;

@AutowiredprivateLogRepository logRepository;publicString initUsername(String username) {if(!StringUtils.isEmpty(username)){this.username =username;

}return this.username;

}public voidput(JoinPoint joinPoint, String methodName, String module, String description) {try{

HttpServletRequest request=((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();

Log log= newLog();//username = ((JwtClient) SecurityContextHolder.getContext().getAuthentication().getPrincipal()).getUsername();//获取当前登录用户

MyShiroRealm.ShiroUser shiroUser =(MyShiroRealm.ShiroUser) SecurityUtils.getSubject().getPrincipal();//User user = userRepository.findOne(shiroUser.getId());

username =shiroUser.getUsername();if(StringUtils.isEmpty(username)) {

username= Const.USERNAME_IN_CONTEXT != null ? Const.USERNAME_IN_CONTEXT : "未知用户";

}

String ip=IPUtils.getIpAddr(request);

log.setUsername(username);

log.setModule(module);

log.setDescription(description);

log.setIp(ip);

log.setContent(operateContent(joinPoint, methodName, ip, request));

log.setAble(1);//insert(log);

logRepository.save(log);

}catch(Exception e) {

e.printStackTrace();

}

}/*public Page page(LogRequest request, Page page) {

if(request == null){

request = new LogRequest();

}

request.setIsDeleted(Config.ABLE_CONFIG.ABLE);

List logs = baseMapper.page(request,page);

page.setRecords(logs);

return page;

}*/

/*** 查询所有日志

*@parampageNum

*@paramrequest

*@return

*/

public PageDto findAll(intpageNum, HttpServletRequest request) {

Sort sort= new Sort(Sort.Direction.DESC, "updateAt");

List operators = HttpRequests.getParametersStartingWith(request, "Q_");//增加删除标识的过滤

SpecificationOperator isValid = new SpecificationOperator("able", "1", "EQ");

operators.add(isValid);

MySpecification mySpecifications = new MySpecification<>(operators);

Pageable pageable= new PageRequest(pageNum, 10, sort);

Page page =logRepository.findAll(mySpecifications, pageable);//设置PageDto

List parameters =page.getContent();long total =page.getTotalElements();

PageDto pageDto= newPageDto();

pageDto.setRows(parameters);

pageDto.setTotal(total);returnpageDto;

}public String operateContent(JoinPoint joinPoint, String methodName, String ip, HttpServletRequest request) throwsClassNotFoundException, NotFoundException {

String className=joinPoint.getTarget().getClass().getName();

Object[] params=joinPoint.getArgs();

String classType=joinPoint.getTarget().getClass().getName();

Class> clazz =Class.forName(classType);

String clazzName=clazz.getName();

Map nameAndArgs = getFieldsName(this.getClass(), clazzName, methodName,params);

StringBuffer bf= newStringBuffer();if (!CollectionUtils.isEmpty(nameAndArgs)){

Iterator it=nameAndArgs.entrySet().iterator();while(it.hasNext()){

Map.Entry entry=(Map.Entry) it.next();

String key=(String) entry.getKey();

String value=JSONObject.toJSONString(entry.getValue());

bf.append(key).append("=");

bf.append(value).append("&");

}

}if(StringUtils.isEmpty(bf.toString())){

bf.append(request.getQueryString());

}returnString.format(LOG_CONTENT, className, methodName, bf.toString(), ip);

}private Map getFieldsName(Class cls, String clazzName, String methodName, Object[] args) throwsNotFoundException {

Map map=new HashMap();

ClassPool pool=ClassPool.getDefault();

ClassClassPath classPath= newClassClassPath(cls);

pool.insertClassPath(classPath);

CtClass cc=pool.get(clazzName);

CtMethod cm=cc.getDeclaredMethod(methodName);

MethodInfo methodInfo=cm.getMethodInfo();

CodeAttribute codeAttribute=methodInfo.getCodeAttribute();

LocalVariableAttribute attr=(LocalVariableAttribute) codeAttribute.getAttribute(LocalVariableAttribute.tag);if (attr == null) {//exception

returnmap;

}int pos = Modifier.isStatic(cm.getModifiers()) ? 0 : 1;for (int i = 0; i < cm.getParameterTypes().length; i++){

map.put( attr.variableName(i+ pos),args[i]);//paramNames即参数名

}returnmap;

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值