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. ...
随机推荐
- CentOS7 tomcat systemctl脚本
1,centos7 使用 systemctl 替换了 service命令 参考:redhat文档: https://access.redhat.com/documentation/en-US/Red_ ...
- ab压力测试之post与get请求
安装ab工具 yum install httpd-tools 参数说明 -n:执行的请求个数,默认时执行一个请求 -c:一次产生的请求个数,即并发个数 -p:模拟post请求,文件格式为gid=2&a ...
- redis3.0自带集群配置
参考 http://redis.readthedocs.org/en/latest/topic/cluster-tutorial.html http://yindashan.github.io/blo ...
- Erlang tool -- recon
遇见recon 以来, 每次定位系统瓶颈, 总是能让我眼前一亮. 比如说, 定位非尾递归导致的内存暴涨, 定位引发CPU满载的进程.得心应手,每每额手称庆. recon 是ferd 大神 释出的一个 ...
- mamp下安装ruby的mysql库
mysql2库死活不行,用ruby-mysql得了,纯ruby的库 gem "ruby-mysql" require 'mysql'
- Air test 基于屏幕比例实现滑动的方法
# -*- encoding=utf8 -*- __author__ = "chenshanju" __docs__ = "基于iOS类实现滑动" from a ...
- Shell中单引号、双引号、反引号、反斜杠的区别
1. 单引号 ( '' ) # grep Susan phonebook Susan Goldberg -- Susan Topple -- 如果我们想查找的是Susan Goldberg,不能直接使 ...
- php error_log记录日志的使用方法和配置 (日志目录一定要手动创建)
对于PHP开发者来 说,一旦某个产品投入使用,应该立即将 display_errors选项关闭,以免因为这些错误所透露的路径.数据库连接.数据表等信息而遭到黑客攻击.但是,任何一个产品在投入使用后,都 ...
- Web Api HelpPage
为了方面APP开发人员,服务端的接口都应当提供详尽的API说明.但每次有修改,既要维护代码,又要维护文档,一旦开发进度紧张,很容易导致代码与文档不一致. Web API有一个Help Page插件,可 ...
- MySQL GTID (三)
五.如何跳过一个GTID 环境见系列一 5.1 创建表,模拟数据 #主机上 create table t_test (id int primary key ,name varchar(10)); in ...