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
上传中...
上传图片
插入图片

其他相关推荐

SQL左连接——查询每个用户各操作类型的文章数量
Oracle数据库的SQL查询语句查询每个用户最近一次的登录记录并且只显示一条
centos配置history记录每个用户执行过的命令
搜索引擎会通过日志文件把用户每次检索使用的所有检索串都记录下来,每个查询串的长度为1-255字节。
CDMA技术资料CDMA系统是基于码分技术(扩频技术)和多址技术的通信系统,系统为每个用户分配各自特定地址码。
Linux代码分析 本文详细分析了 2.6.x 内核中链表结构的实现,并通过实例对每个链表操作接口进行了详尽的讲解。
edu大型投票调查系统 v3.0 可以支持超多的投票项目,每个项目都有完整的管理选项,后台除了投票管理外,还具有用户管理、企业列表、系统设置、等功能
解决Windows Server 2008 R2 远程桌面每个用户只能进行一个会话
Serials 2004 是世界著名的破解组织 Egis/Core 出品的最好的注册码/序列号查询软件,内含几万个最新软件的注册码。新版重新编写了界面,查询使用更加方便,而且已经成为一个注册码管理器,用户可以把自己收集的注册码作为数据库存入 Serials 2004 中,查找方便快速。 Egis/Core 会定期在网上公布最新的注册码数据文件,用户只要下载后更新自己的数据库就行了,一般每个月两次。
每个Mac OS X 命令行用户应当知道的八个终端工具