Package com.thinkgem.jeesite.modules.sys.interceptor

Source Code of com.thinkgem.jeesite.modules.sys.interceptor.LogInterceptor

/**
* Copyright &copy; 2012-2013 <a href="https://github.com/thinkgem/jeesite">JeeSite</a> All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
*/
package com.thinkgem.jeesite.modules.sys.interceptor;

import java.util.Date;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import com.thinkgem.jeesite.common.config.Global;
import com.thinkgem.jeesite.common.service.BaseService;
import com.thinkgem.jeesite.common.utils.SpringContextHolder;
import com.thinkgem.jeesite.common.utils.StringUtils;
import com.thinkgem.jeesite.modules.sys.dao.LogDao;
import com.thinkgem.jeesite.modules.sys.entity.Log;
import com.thinkgem.jeesite.modules.sys.entity.User;
import com.thinkgem.jeesite.modules.sys.utils.UserUtils;

import eu.bitwalker.useragentutils.DeviceType;
import eu.bitwalker.useragentutils.UserAgent;

/**
* 系统拦截器
* @author ThinkGem
* @version 2013-6-6
*/
public class LogInterceptor extends BaseService implements HandlerInterceptor {

  private static LogDao logDao = SpringContextHolder.getBean(LogDao.class);
 
  @Override
  public boolean preHandle(HttpServletRequest request, HttpServletResponse response,
      Object handler) throws Exception {
    return true;
  }

  @Override
  public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
      ModelAndView modelAndView) throws Exception {
    if(modelAndView!=null) {
      String viewName = modelAndView.getViewName();
      UserAgent userAgent = UserAgent.parseUserAgentString(request.getHeader("User-Agent"));
      if(viewName.startsWith("modules/") && DeviceType.MOBILE.equals(userAgent.getOperatingSystem().getDeviceType())){
        modelAndView.setViewName(viewName.replaceFirst("modules", "mobile"));
      }
    }
  }

  @Override
  @Transactional(readOnly = false)
  public void afterCompletion(HttpServletRequest request, HttpServletResponse response,
      Object handler, Exception ex) throws Exception {
   
    String requestRri = request.getRequestURI();
    String uriPrefix = request.getContextPath() + Global.getAdminPath();
   
    if ((StringUtils.startsWith(requestRri, uriPrefix) && (StringUtils.endsWith(requestRri, "/save")
        || StringUtils.endsWith(requestRri, "/delete") || StringUtils.endsWith(requestRri, "/import")
        || StringUtils.endsWith(requestRri, "/updateSort"))) || ex!=null){
   
      User user = UserUtils.getUser();
      if (user!=null && user.getId()!=null){
       
        StringBuilder params = new StringBuilder();
        int index = 0;
        for (Object param : request.getParameterMap().keySet()){
          params.append((index++ == 0 ? "" : "&") + param + "=");
          params.append(StringUtils.abbr(StringUtils.endsWithIgnoreCase((String)param, "password")
              ? "" : request.getParameter((String)param), 100));
        }
       
        Log log = new Log();
        log.setType(ex == null ? Log.TYPE_ACCESS : Log.TYPE_EXCEPTION);
        log.setCreateBy(user);
        log.setCreateDate(new Date());
        log.setRemoteAddr(StringUtils.getRemoteAddr(request));
        log.setUserAgent(request.getHeader("user-agent"));
        log.setRequestUri(request.getRequestURI());
        log.setMethod(request.getMethod());
        log.setParams(params.toString());
        log.setException(ex != null ? ex.toString() : "");
        logDao.save(log);
       
        logger.info("save log {type: {}, loginName: {}, uri: {}}, ", log.getType(), user.getLoginName(), log.getRequestUri());
       
      }
    }
   
//    logger.debug("最大内存: {}, 已分配内存: {}, 已分配内存中的剩余空间: {}, 最大可用内存: {}",
//        Runtime.getRuntime().maxMemory(), Runtime.getRuntime().totalMemory(), Runtime.getRuntime().freeMemory(),
//        Runtime.getRuntime().maxMemory()-Runtime.getRuntime().totalMemory()+Runtime.getRuntime().freeMemory());
   
  }

}
TOP

Related Classes of com.thinkgem.jeesite.modules.sys.interceptor.LogInterceptor

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.