1. 程式人生 > >使用Spring MVC攔截器管理操作日誌

使用Spring MVC攔截器管理操作日誌

通過攔截器記錄操作日誌,將操作日誌儲存到資料庫中,實現這個功能需要我們將curd操作的URL規範化,比如:新增是以add或者insert開始,修改是update開頭,刪除則是delete開頭。

第一步:編寫攔截器類,程式碼如下:

package com.siweisoft.interceptor;


import com.siweisoft.dao.OperationRecordMapper;
import com.siweisoft.model.OperationRecord;
import com.siweisoft.model.User;
import org.slf4j.Logger;
import
org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import
java.util.Date; /** * 操作日誌的攔截器 * Created by Robin on 2017-08-08. */ public class OperationRecordInterceptor implements HandlerInterceptor{ protected static final Logger log = LoggerFactory.getLogger(OperationRecordInterceptor.class); @Autowired private OperationRecordMapper operationRecordMapper; @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 { } /** * 方法執行後攔截 * 用來記錄所有請求中的操作日誌 * @param request * @param response * @param handler * @return * @throws Exception */ @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { //相對路徑 /tongche/metadata/all String url = request.getRequestURI(); //請求方式 POST String method = request.getMethod(); String[] urlArray = url.split("/"); if(urlArray.length>3){ //判斷是否是增加操作 if("add".equalsIgnoreCase(urlArray[3].substring(0,3))||("ins".equalsIgnoreCase(urlArray[3].substring(0,3)))&&("POST".equalsIgnoreCase(method))){ addOperation(request,"ADD",urlArray[2],0); } //判斷是否是刪除操作 if("del".equalsIgnoreCase(urlArray[3].substring(0,3))&&("POST".equalsIgnoreCase(method))){ //當前操作的物件的ID int id = (int)request.getAttribute("id"); addOperation(request,"DELETE",urlArray[2],id); } //判斷是否是修改操作 if("upd".equalsIgnoreCase(urlArray[3].substring(0,3))&&("POST".equalsIgnoreCase(method))){ addOperation(request,"UPDATE",urlArray[2],0); } }else{ log.info("不合法的URL:"+url); } } /** * 向操作日誌中增加資料的方法 * @param request * @param operate 操作 * @param operateObject 操作物件 */ public void addOperation(HttpServletRequest request, String operate, String operateObject,int id){ //構造操作日誌物件 OperationRecord operationRecord = new OperationRecord(); User user = (User) request.getSession().getAttribute("user"); operationRecord.setOperateObject(operateObject); operationRecord.setOperate(operate); operationRecord.setUserId(user.getId()); operationRecord.setOperateTime(new Date()); operationRecord.setOperateState(1); if(id>0){ operationRecord.setOperateObjectKey(id); } operationRecordMapper.insertSelective(operationRecord); log.info("新增操作日誌成功!"); } }

第二步:配置攔截器,程式碼如下:

    <!--日誌攔截器-->
    <mvc:interceptor>
        <mvc:mapping path="/**" />
        <!-- 需排除攔截的地址 -->
        <mvc:exclude-mapping path="/login.jsp"/>
        <!--<mvc:exclude-mapping path="/user/getUserInfo"/>-->
        <mvc:exclude-mapping path="/user/pcLogin"/>
        <bean class="com.siweisoft.interceptor.OperationRecordInterceptor"></bean>
    </mvc:interceptor>

這樣就可以把簡單的curd的操作記錄到資料庫中。