用springMVC拦截器实现操作日志管理功能

  最近这两周都在做一个日志管理的模块,在别人搭好的spring-springMVC-mybatis框架下实现系统操作日志入库并显示的功能。

  心路历程:最先想到的是原始办法,用jdbc连接数据库,在每个controller里的每个方法都调用一次插入数据库方法,想想就非常复杂,而且添加一个方法就要再添加一个入库操作,于是放弃了;然后在网上搜日志管理模块,发现很多人都用SpringAOP注解来做,AOP(横向切面编程),听起来非常高大上有没有,然而非常不适合像我一样的菜鸟新手;想了好几天,终于让我想到了一个非常简单易操作的方法,用springMVC自带的拦截器拦截请求,解析并插入数据库。

  因为每个方法在调用的时候都会经过springMVC的拦截器,只需要解析每个方法的url,然后采用字符串拼接就OK了,是不是非常非常非常简单,可把我给厉害坏了,叉会腰。

@Override
	public boolean preHandle(final HttpServletRequest request,
			HttpServletResponse response, Object handler){
		JSONObject requestBody = new JSONObject();
		JSONObject params = new JSONObject();
		JSONObject headers = new JSONObject();
		Enumeration<String> em = request.getHeaderNames();
		while (em.hasMoreElements()) {
			String s = em.nextElement();
			headers.put(s, request.getHeader(s));
		}
		requestBody.put("headers", headers);

		Enumeration<String> pem = request.getParameterNames();
		while (pem.hasMoreElements()) {
			String s = pem.nextElement();
			headers.put(s, request.getParameter(s));
		}
		
		String path = request.getServletPath();
		LogForm log = new LogForm();
		String content = requestBody.toJSONString();
		log.setLog_operation(request.getRequestURI());
		log.setLogin_username("用户名");
		SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");    
		log.setCreatetime(df.format(System.currentTimeMillis()));//获取当前时间插入数据库
		
		String requestUrl = request.getRequestURI(); 
		
			logService.insertLog(log);
		
		
		
		if(uncheckUrls.contains(requestUrl)){ 
		
			return true; 		
		}
				
		
				
		if(request.getSession().getAttribute("user") == null && !path.contains("login.do")){
								
			try {
										
				request.setCharacterEncoding("UTF-8");
							
				response.setCharacterEncoding("UTF-8");  
										
				response.setContentType("text/html;charset=UTF-8"); 
									
				StringBuffer sb = new StringBuffer();
									
				sb.append("<script type='text/javascript'>");					
					
				sb.append("alert('请重新登录!!!');");					
					
				sb.append("window.location.href ='**'");
										
				sb.append("</script>");
														
				response.getWriter().print(sb.toString());					
				return true;


			} catch (IOException e) {
					
				e.printStackTrace();
				return false;
			}				
							
		}else{
								
			return true;			
		}			
	}


发布了30 篇原创文章 · 获赞 17 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/selinaqqqq/article/details/80363714