博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
spring aop记录用户的操作
阅读量:4624 次
发布时间:2019-06-09

本文共 4059 字,大约阅读时间需要 13 分钟。

1.命名空间

xmlns:aop="http://www.springframework.org/schema/aop"

http://www.springframework.org/schema/aop

http://www.springframework.org/schema/aop/spring-aop-4.0.xsd

2.配置xml

<!-- aop支持 如果记录Controller aop配置必须写到spring mvc的xml中,如果记录service aop 配置要写到 spring主配置文件-->

<aop:aspectj-autoproxy proxy-target-class="true" />
<!-- aop 实现记录日志功能 -->
<bean id="logAspect" class="com.rdkl.qmjs.logs.LogAspect"/>
<context:component-scan base-package="com.rdkl.qmjs.controller" />

3.实体类

@Target({ElementType.METHOD}) @Retention(RetentionPolicy.RUNTIME)public @interface RecordLog {//描述public String description() default "";//模块Idpublic String module_id() default "";//日志等级public String log_lev() default "1";//记录字段public String recordfield() default "";//字段描述public String fieldnote() default "";//操作类型:0-add-高,1-update-高,2-delete-高,3-login-中,4-select-低public String oper_type() default "";//系统类型 0:管理平台 1:场馆后台 2:商城后台public int sys_type() default 0;}
@Aspectpublic class LogAspect {        @Autowired    private LogService logService;         //方法执行的前后调用    @AfterReturning("execution (* com.rdkl.qmjs.controller..*.*(..))&& @annotation(recordLog)")     public void opLogAfterReturning(JoinPoint joinPoint,RecordLog recordLog) throws Throwable{         Object[] params = joinPoint.getArgs();//获取目标方法体参数        System.out.println("*************write log begin****************");        HttpServletRequest request=null;        String ip="";        if(params!=null&&params.length>0){            for(Object obj:params){                if(obj instanceof HttpServletRequest){                    request=(HttpServletRequest)obj;                    ip=getIpAddr(request);                }            }        }        String desc=recordLog.description();        String field=recordLog.recordfield();        String note=recordLog.fieldnote();        int sys_type = recordLog.sys_type();        if(request!=null&&StringUtils.isNotBlank(field)){            String fieldVal=request.getParameter(field);            if(fieldVal!=null&&!"".equals(fieldVal)){                if(StringUtils.isNotBlank(note)){                    desc+="-"+note+":"+fieldVal;                }else{                    desc+="-"+field+":"+fieldVal;                }            }        }        User user= SecurityCommonUtils.getCurrentUser();        Log log=new Log();        log.setIp_addr(ip);        if("0".equals(recordLog.oper_type())||"1".equals(recordLog.oper_type())                ||"2".equals(recordLog.oper_type())){
//增删改数据,等级为高 log.setLog_lev(2);//高级 }else if("3".equals(recordLog.oper_type())){ log.setLog_lev(1);//中级 }else{ log.setLog_lev(0);//普通 } String module_id=recordLog.module_id(); if(StringUtils.isNotBlank(module_id)){ log.setModule_id(Long.parseLong(module_id));//模块ID } log.setOper_date(new Date()); log.setContent(desc); log.setSys_type(sys_type); if(sys_type==1){
//场馆日志 log.setObject_id(user.getRel_module_id()); } if(user!=null){ log.setUser_id(user.getUser_id()); log.setOper_user(user.getUser_id()); } logService.insertLogs(log); System.out.println("*************write log end****************"); } /** * 获取请求的IP * @param request * @return */ private String getIpAddr(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; }}
View Code

在需要记录操作的方法上

@RecordLog(description = "保存增加的信息", module_id = "1114003001", oper_type = "0", sys_type = 1)

 

转载于:https://www.cnblogs.com/bluedeblog/p/7521478.html

你可能感兴趣的文章
Color Length UVA - 1625
查看>>
TLS/SSL
查看>>
zoj2319Beautiful People Dp
查看>>
图片加载 背景色块问题
查看>>
Static Binding (Early Binding) vs Dynamic Binding (Late Binding)
查看>>
搭建git服务器
查看>>
iOS之UIDynamic UI动力学使用步骤
查看>>
poj 2498 动态规划
查看>>
Windows Phone 7中使用PhoneApplicationService类保存应用程序状态
查看>>
MySql数据库的下载和安装卸载
查看>>
JDBC接口核心的API
查看>>
双缓冲技术局部更新原理之派生自View
查看>>
PPAPI插件与浏览器的通信
查看>>
用 query 方法 获得xml 节点的值
查看>>
Hello,Android
查看>>
Sublime Text 3 build 3103 注册码
查看>>
删与改
查看>>
SAP 中如何寻找增强
查看>>
spi驱动无法建立spidev问题
查看>>
ANDROID开发之SQLite详解
查看>>