spring aop记录用户的操作
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 "";
//模块Id
public 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;
}
@Aspect
public 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&¶ms.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;
}
}
在需要记录操作的方法上
@RecordLog(description = "保存增加的信息", module_id = "1114003001", oper_type = "0", sys_type = 1)
spring aop记录用户的操作的更多相关文章
- SpringSecurity权限管理系统实战—八、AOP 记录用户、异常日志
目录 SpringSecurity权限管理系统实战-一.项目简介和开发环境准备 SpringSecurity权限管理系统实战-二.日志.接口文档等实现 SpringSecurity权限管理系统实战-三 ...
- TinyFrame尾篇:整合Spring AOP实现用户认证
创建Manager用户验证表 这一篇主要讲解使用AOP对用户操作进行验证,如果通过验证,则继续执行,反之,则不能执行.其思想和上一篇完全一致. 由于需要用到用户认证,所以我们新建一个Manager实体 ...
- 从零开始学 Java - Spring AOP 实现用户权限验证
每个项目都会有权限管理系统 无论你是一个简单的企业站,还是一个复杂到爆的平台级项目,都会涉及到用户登录.权限管理这些必不可少的业务逻辑.有人说,企业站需要什么权限管理阿?那行吧,你那可能叫静态页面,就 ...
- Spring aop 记录操作日志 Aspect
前几天做系统日志记录的功能,一个操作调一次记录方法,每次还得去收集参数等等,太尼玛烦了.在程序员的世界里,当你的一个功能重复出现多次,就应该想想肯定有更简单的实现方法.于是果断搜索各种资料,终于搞定了 ...
- Spring aop 记录操作日志 Aspect 自定义注解
时间过的真快,转眼就一年了,没想到随手写的笔记会被这么多人浏览,不想误人子弟,于是整理了一个优化版,在这里感谢智斌哥提供的建议和帮助,话不多说,进入正题 所需jar包 :spring4.3相关联以及a ...
- aop 记录用户操作(一)
转载: http://www.cnblogs.com/guokai870510826/p/5981015.html 使用标签来设置需要的记录 实例:@ISystemLog() @Controller ...
- spring aop切面编程实现操作日志步骤
1.在spring-mvc.xml配置文件中打开切面开关: <aop:aspectj-autoproxy proxy-target-class="true"/> 注意: ...
- Spring学习总结(16)——Spring AOP实现执行数据库操作前根据业务来动态切换数据源
深刻讨论为什么要读写分离? 为了服务器承载更多的用户?提升了网站的响应速度?分摊数据库服务器的压力?就是为了双机热备又不想浪费备份服务器?上面这些回答,我认为都不是错误的,但也都不是完全正确的.「读写 ...
- 使用spring aop 记录接口日志
spring配置文件中增加启用aop的配置 <!-- 增加aop 自动代理配置 --> <aop:aspectj-autoproxy /> 切面类配置 package com. ...
随机推荐
- linux-一篇文章完成lnmp环境的编译安装
lnmp环境搭建 前置条件 操作系统安装:CentOS 6.8 64位最小化安装. 配置好IP.DNS.网关.主机名 配置防火墙,开启80.3306端口 关闭访问墙 service iptables ...
- VMware ESXi NAT实现
VMware ESXi默认不支持NAT,但是我们如果只有一个外网端口映射,然后希望通过这个映射,从外网访问两台机器的话,那最好做NAT.这里我们通过一个开源的网络防火墙pfSense来实现NAT[1] ...
- [C++ Primer] 第2章: 变量
初始化与赋值 当对象在创建时获得了一个特定的值, 我们就说这个对象被初始化了. 在使用=号时, 如果创建了新的对象, 则为初始化而非赋值. 初始化不是赋值, 初始化的含义是创建变量时赋予其一个初始值, ...
- Bootstrap-Plugin:模态框(Modal)插件
ylbtech-Bootstrap-Plugin:模态框(Modal)插件 1.返回顶部 1. Bootstrap 模态框(Modal)插件 模态框(Modal)是覆盖在父窗体上的子窗体.通常,目的是 ...
- 编译安装php-5.4.44
编译安装php-5.4.44 1. 首先,安装必要的库文件,一面编译被打断: yum install -y gcc gcc-c++ make zlib zlib-devel pcre pcre-de ...
- 利用U盘安装Redhat-server-Linux-7.1
利用U盘安装Redhat-server-Linux-7.1 [原]红帽 Red Hat Linux相关产品iso镜像下载[百度云]
- nginx.conf_2017-11-24
user webroot; worker_processes 4; worker_cpu_affinity 1000 0100 0010 0001; worker_rlimit_nofile 6550 ...
- Hive常见问题汇总
参考资料: Hive常见问题汇总 啟動hive出錯,提示沒有權限 2015年04月02日 09:58:49 阅读数:31769 这里小编汇集,使用Hive时遇到的常见问题. 1,执行#hive命令进入 ...
- 跟我学算法-tensorflow 实现卷积神经网络附带保存和读取
这里的话就不多说明了,因为上上一个博客已经说明了 import numpy as np import tensorflow as tf import matplotlib.pyplot as plt ...
- 4 MySQL--表(增删改查)
1.表的介绍 表相当于文件,表中的一条记录就相当于文件的一行内容,不同的是,表中的一条记录有对应的标题,称为表的字段 id,name,qq,age称为字段,其余的,一行内容称为一条记录 2.创建表: ...