系統日志一般用來記錄用戶登錄系統后的一些操作記錄
誰(當前登錄用戶)--- 什么時間---- 做了哪些操作
新建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 }