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 YoloV5 第三方库的版本对照问题
    • ¥15 请完成下列相关问题!
    • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?
    • ¥15 求daily translation(DT)偏差订正方法的代码
    • ¥15 js调用html页面需要隐藏某个按钮
    • ¥15 ads仿真结果在圆图上是怎么读数的
    • ¥20 Cotex M3的调试和程序执行方式是什么样的?
    • ¥20 java项目连接sqlserver时报ssl相关错误
    • ¥15 一道python难题3
    • ¥15 牛顿斯科特系数表表示