zkddkz2010 2015-06-25 08:22 采纳率: 0%
浏览 1164

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

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;
}

  • 写回答

0条回答

    报告相同问题?

    悬赏问题

    • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
    • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
    • ¥20 有关区间dp的问题求解
    • ¥15 多电路系统共用电源的串扰问题
    • ¥15 slam rangenet++配置
    • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
    • ¥15 ubuntu子系统密码忘记
    • ¥15 保护模式-系统加载-段寄存器
    • ¥15 电脑桌面设定一个区域禁止鼠标操作
    • ¥15 求NPF226060磁芯的详细资料