SpringBoot實戰項目(十七)--使用攔截器實現系統日志功能


系統日志一般用來記錄用戶登錄系統后的一些操作記錄

誰(當前登錄用戶)--- 什么時間---- 做了哪些操作

 

新建sys_log(日志記錄表)

1 CREATE TABLE `sys_log` (
2   `logId` int(11) NOT NULL AUTO_INCREMENT,
3   `userName` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
4   `msg` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
5   `createTime` timestamp NOT NULL ON UPDATE CURRENT_TIMESTAMP,
6   PRIMARY KEY (`logId`) USING BTREE
7 ) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8;

實體類

1 @Data
2 @ToString
3 public class SysLog implements Serializable {
4 
5     private Long logId;
6     private String userName;
7     private String msg;
8     private String createTime;

利用自定義攔截器---MyInterceptor實現業務邏輯及數據保存操作

 1 package com.beilin.interceptor;
 2 
 3 
 4 
 5 import com.beilin.dao.LogDao;
 6 import com.beilin.entity.SysLog;
 7 import com.beilin.entity.SysUser;
 8 import org.springframework.beans.factory.annotation.Autowired;
 9 import org.springframework.context.annotation.Bean;
10 import org.springframework.web.servlet.HandlerInterceptor;
11 import org.springframework.web.servlet.ModelAndView;
12 
13 
14 import javax.servlet.http.HttpServletRequest;
15 import javax.servlet.http.HttpServletResponse;
16 import java.util.Date;
17 
18 /**
19  *  攔截器
20  */
21 public class MyInterceptor implements HandlerInterceptor {
22 
23     @Autowired
24     private LogDao logDao;
25 
26  
27 
28     @Override
29     public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
30         //獲取當前用戶
31         SysUser user = (SysUser)request.getSession().getAttribute("user");
32         Object msg = request.getSession().getAttribute("msg");
33         //傳操作的JAVABEAN過來
34         if (user != null && msg != null) {
35             //寫入日志
36             SysLog log = new SysLog();
37             log.setUserName(user.getUserName());
38             log.setMsg(msg.toString());
39             logDao.save(log);
40             //刪除msg
41             request.getSession().removeAttribute("msg");
42         }
43     }
44 
45 }

(注意:攔截器原本需要重寫三個方法的,這里為了方便直觀,只保留所需的,完整的最后附上)

這里都有相關文字說明,不再一一贅述,只要了解了設計思想其實很容易

用戶做新增,修改,刪除操作的時候才需要做記錄,查看之類的就沒必要

 1  @PostMapping("/add")
 2     @ResponseBody
 3     //新增用戶
 4     public Results<SysUser> save(SysUser sysUser, Integer roleId, HttpServletRequest request) {
 5        List<SysUser> results = userService.getUser(sysUser.getUserName(),sysUser.getTelephone(),sysUser.getEmail());
 6        if (results != null && results.size()>0){
 7            for (SysUser user : results){
 8                //判斷用戶名是否已存在
 9                 if (user.getUserName().equals(sysUser.getUserName())){
10                         return Results.failure(ResponseCode.USERNAME_REPEAT.getCode(), ResponseCode.USERNAME_REPEAT.getMessage());
11                     }
12                      //判斷手機號是否已存在
13                     if (user.getTelephone().equals(sysUser.getTelephone())) {
14                         return Results.failure(ResponseCode.PHONE_REPEAT.getCode(), ResponseCode.PHONE_REPEAT.getMessage());
15                     }
16                     //判斷郵箱是否已存在
17                     if (user.getEmail().equals(sysUser.getEmail())) {
18                         return Results.failure(ResponseCode.EMAIL_REPEAT.getCode(), ResponseCode.EMAIL_REPEAT.getMessage());
19                     }
20            }
21        }
22        sysUser.setStatus(1);
23        //MD5加密
24        sysUser.setPassWord(Md5Cipher.encryptWithSalt(sysUser.getPassWord()));
25        request.getSession().setAttribute("msg","新增了用戶資料:"+sysUser.toString());
26             return userService.save(sysUser,roleId);
27     }

如代碼所示,msg記錄用戶的操作內容,這里sysUser.toString()方法我只取幾個有意義的值,有興趣的可以自己重寫或者拼接

 

 

 這樣,sys_log表的字段都有值了,接下來把信息保存到數據庫即可

 

 

 

 這里比較簡單不需要寫service層了

項目最終效果----

 

 

 

 1 package com.beilin.interceptor;
 2 
 3 
 4 
 5 import com.beilin.dao.LogDao;
 6 import com.beilin.entity.SysLog;
 7 import com.beilin.entity.SysUser;
 8 import org.springframework.beans.factory.annotation.Autowired;
 9 import org.springframework.context.annotation.Bean;
10 import org.springframework.web.servlet.HandlerInterceptor;
11 import org.springframework.web.servlet.ModelAndView;
12 
13 
14 import javax.servlet.http.HttpServletRequest;
15 import javax.servlet.http.HttpServletResponse;
16 import java.util.Date;
17 
18 /**
19  *  攔截器
20  */
21 public class MyInterceptor implements HandlerInterceptor {
22 
23     @Autowired
24     private LogDao logDao;
25 
26     @Override
27     public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
28         //獲取登錄時保存到session的用戶信息
29         SysUser user = (SysUser) request.getSession().getAttribute("user");
30         if (user == null) {
31             //攔截未登錄請求
32             request.getRequestDispatcher("/login").forward(request, response);
33             return false;
34         }
35         return true;
36     }
37 
38     @Override
39     public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
40 
41     }
42 
43     @Override
44     public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
45         //獲取當前用戶
46         SysUser user = (SysUser)request.getSession().getAttribute("user");
47         Object msg = request.getSession().getAttribute("msg");
48         //傳操作的JAVABEAN過來
49         if (user != null && msg != null) {
50             //寫入日志
51             SysLog log = new SysLog();
52             log.setUserName(user.getUserName());
53             log.setMsg(msg.toString());
54             logDao.save(log);
55             //刪除msg
56             request.getSession().removeAttribute("msg");
57         }
58     }
59 
60 }
MyInterceptor

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM