2 zkddkz2010 zkddkz2010 于 2015.06.25 16:22 提问

记录每个用户的操作 记录每个用户的操作

1、JoinPoint和ProceedingJoinPoint(aspectjrt-1.6.11.jar包):采用AOP的方法,记录每个用户的操作。
(1)记录用户操作主要记录用户对系统进行操作时,对后台controller中的方法进行调用进行记录。
首先对要记录的方法进行配置(针对controller中的方法调用进行调用),即:

aop:config







/aop:aspect
/aop:config
这样,当调用com.paic.mercury.vigilant.controller下的类中的方法时,就会执行doAround方法,进而记录用户操作。
(2)doAround方法如下
如执行Spring会自动传入doAround的参数,如pjp:execution(ModelAndView com.paic.mercury.vigilant.controller.HomeController.login(HttpServletRequest));execution(List

com.paic.mercury.vigilant.controller.HomeController.getAvailableServices(HttpServletRequest))。
public Object doAround2(ProceedingJoinPoint pjp) throws Throwable {
Object retVal = pjp.proceed(); //proceed方法相当于invoke方法,调用目标类的目标方法。
String userName = "NULL";
Object user = ServletUtil.getResourceUser();
if (user != null && user instanceof ResourceUser) {
userName = ((ResourceUser) user).getUsername();
}
StringBuffer sb = new StringBuffer();
//得到执行的类及调用的方法
sb.append("User(").append(userName).append(") invoke ").append(pjp.getTarget().getClass().getSimpleName()).append(".").append(pjp.getSignature().getName());
if (retVal instanceof UIResult) {
UIResult result = (UIResult) retVal;
if (!result.isFlag()) {
sb.append(" ERROR! code:").append(result.getErrorCode()).append(" message:").append(result.getMessage());
}
}
LOG.info(sb.toString());
//输出:2015-06-25 16:09:42,279 INFO User(XUXIN109) invoke HomeController.showHome
Object[] args = pjp.getArgs(); //得到调用方法时,传入的参数。
if (args != null && args.length > 1) { //输出参数
LOG.info("PRINTING ARGS. ===================");
StringBuffer argSb = new StringBuffer();
for (int index = 0; index < args.length - 1; index++) {
Object arg = args[index];
if (arg != null) {
argSb.append("arg type:").append(args[index].getClass().getSimpleName()).append(" value:").append(args[index] + "");
}
LOG.info(argSb.toString()); }
LOG.info("PRINTING ARGS END. ==============");
}
return retVal;
}
(3)login()方法如下:
@RequestMapping(value = "/home/login")
public ModelAndView login(HttpServletRequest request) {
ModelAndView view = new ModelAndView("login");
AuthenticationException exception = (AuthenticationException) request.getSession().getAttribute(WebAttributes.AUTHENTICATION_EXCEPTION);
if (exception != null) {
if (exception instanceof BadCredentialsException) {
view.addObject("ERROR_MSG", "BadCredentials");
} else if (exception instanceof UsernameNotFoundException) {
view.addObject("ERROR_MSG", "UserNotFound");
}
request.getSession().setAttribute(WebAttributes.AUTHENTICATION_EXCEPTION, null);
}
return view;
}

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
linux记录用户操作(Shell)
#!/bin/bash #history USERD=`who -u am i 2>/dev/null`  USER_IP=`who -u am i 2>/dev/null | awk '{print $NF}' | sed -e 's/[ () ]//g'` HISTDIR=/usr/share/.history if [ -z $USER_IP ] then USER_IP =
JAVA记录用户操作日志
import java.io.BufferedWriter; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.i
Linux下记录所有用户操作的脚本
以实现在Linux下所有用户,不管是远程还是本地登陆,在本机的所有操作都会记录下来,并生成包含“用户/IP/时间”的文件存放在指定位置,方便管理员以后查看不同用户都在服务器上干了些什么! 目前这个代码只实现了记录用户的操作命令,但是像vi编辑只会记录vi这条命令,但是在文件里所修改的内容无法记录。。。有时间再研究一下! 将下面的代码追加到/etc/profile文件里即可 PS1="`who
记录用户操作日志的解决方案
    在吸收了 zjjqxs、flyingmist 等几位朋友的经验、方法后归纳总结出如下的方法,可以比较方便、通用的解决这个问题。    看了 zjjqxs 的发言后突然恍然大悟,利用 Trigger 多简单(竟然没想到!),但是又存在几个关键问题:后台记录用户名与用户机的 IP。首先用户名问题好解决,直接使用 SUser_ID() 或 User_Id ()函数即可。至于记录用户 IP 可以这
列出用户表及查询所有用户表的第一条记录
1。列出所有的用户表select * from sysobjects where objectproperty(id, isusertable)=12。列出所有用户表的第一条记录exec sp_msforeachtable select top 1 * from ?
SQL消费表中查找所有用户最后一条消费记录
SQL消费表中查找所有用户最后一条消费记录 5 SQL消费表中查找所有用户最后一条消费记录 BussnissLogs表中字段BussnissLogsID(消费流水ID),UserID(用户ID),HappeningTime(消费时间) 这个SQL应该怎么写呢? select a.* from BussnissLogs a,(select userid,max(
一种用户操作日志信息的记录及读取方法
申请号:CN 201310364722 申请日期:2013年8月20日 申请人:苏州迈科网络安全技术股份有限公司【摘要】 本发明公开了一种用户操作日志信息的记录及读取方法,包括记录方法,具体按如下步骤进行:S1、网管系统端建立日志记录表、用户操作列表和参数列表,并设定用户操作列表和参数列表的值;S2、用户执行一个操作后,网管系统端首先获取此操作的URL链接,通过对URL链接的分析获取信息
记录用户登录操作
记录登录成功的用户信息到一个测试表:create table login (ip varchar(30),u_name varchar(30)); create or replace trigger logon_db_record after logon on database declare ip STRING(30); user STRING(30);
位图法统计活跃用户
Setbit 的实际应用 场景:  1亿个用户, 每个用户 登陆/做任意操作  ,记为 今天活跃,否则记为不活跃 每周评出: 有奖活跃用户: 连续7天活动 每月评,等等... 思路:  Userid   date                    active 1          2013-07-27         1   //0表示没有登陆,1表示有登陆
Linux中系统户登录和操作日志的记录
用户登录退出的日志记录在 /var/log/secure如果需要记录每个用户操作的记录,在/etc/profile配置文件的末尾加入以下脚本代码来实现:historyUSER=`whoami`USER_IP=`who -u am i 2>/dev/null| awk '{print $NF}'|sed -e 's/[()]//g'`if [ "$USER_IP" = "" ]; thenUSER_