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 redis 验证交互连接过程中遇到 redis Could not connect to Redis at 127.0.0.1:6379: Connection refused 的解决方法
Could not connect to Redis at 127.0.0.1:6379: Connection refused 1.找到redis.conf 并修改 daemonize no 为 d ...
- CentOS之NTP服务器配置
本文使用CentOS 6.5作为搭建环境 一.服务器端配置 1.安装所需软件包 yum -y install ntp ntpdate---------------------------------- ...
- SouthidcEditor编辑器如何支持上传png图片
SouthidcEditor编辑器如何支持上传png图片? asp网站一般都是用的南方数据SouthidcEditor编辑器,可是这个编辑器上传图片功能不能上传png类型的图片,那怎么办?我(红蜘蛛网 ...
- zeromq测试
debian sudo apt-get install libzmq3-dev pip install zmq client.py #coding: utf-8 import zmq context ...
- display:table; 也可以实现 div 始终和内包的图片大小相同
display:table; 也可以实现 div 始终和内包的图片大小相同
- HDU-6156 Palindrome Function(数位DP)
一.题目 二.思路 1.这是很明显的数位DP: 2.和以往数位DP不同的是,这里带了个进制进来,而以往做是纯十进制下或者纯二进制下做操作.但是,不管多少进制,原理都是一样的: 3.这里有个小坑,题目中 ...
- 32位ubuntu14.04手动编译hadoop2.6.0
下载官方编译好的包安装老是报错:Unable to load native-hadoop library for your platform 用file命令查看发现官方包里的libhadoop.so. ...
- js 取元素相对页面的高度和宽度
function pos(elem) { var x = elem.offsetLeft, y = elem.offsetTop; while (elem = elem.offsetPa ...
- 将python源文件打包成exe文件
pyinstaller 库的使用PyInstaller是一个十分有用的第三方库,它能够在Windows.Linux.Mac OS X 等操作系统下将 Python 源文件打包,通过对源文件打包,Pyt ...
- python3.6的turtle库练手
import turtle as t t.speed(10) t.pencolor("yellow") t.fillcolor("red") for num i ...