1. 程式人生 > >自定義註解+springMVC配置攔截器記錄使用者操作的日誌.(寫入資料庫)

自定義註解+springMVC配置攔截器記錄使用者操作的日誌.(寫入資料庫)

springMVC掃包下的分支配置檔案, 注入攔截器

攔截器的內容: (監聽儲存日誌資訊)

@SuppressWarnings({"unchecked","rawtypes"})
public class CommContextInterceptor implements HandlerInterceptor { 
	
		private TSysOperateLogService tSysOperateLogService;
		
		/** 通過spring自動注入 */
		public void setTSysOperateLogServiceImpl(TSysOperateLogService service) {
			this.tSysOperateLogService = service;
		}
		
		/** 
	     * preHandle方法是進行處理器攔截用的,顧名思義,該方法將在Controller處理之前進行呼叫,SpringMVC中的Interceptor攔截器是鏈式的,可以同時存在 
	     * 多個Interceptor,然後SpringMVC會根據宣告的前後順序一個接一個的執行,而且所有的Interceptor中的preHandle方法都會在 
	     * Controller方法呼叫之前呼叫。SpringMVC的這種Interceptor鏈式結構也是可以進行中斷的,這種中斷方式是令preHandle的返 
	     * 回值為false,當preHandle的返回值為false的時候整個請求就結束了。 
	     */ 
	    @Override  
	    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
	    	HandlerMethod methodHandler = (HandlerMethod) handler;  
		    System.out.println("CommContextInterceptor............."+methodHandler.getMethod());
	        return true;   
	    }
	    
	    /** 
	     * 這個方法只會在當前這個Interceptor的preHandle方法返回值為true的時候才會執行。postHandle是進行處理器攔截用的,它的執行時間是在處理器進行處理之 
	     * 後,也就是在Controller的方法呼叫之後執行,但是它會在DispatcherServlet進行檢視的渲染之前執行,也就是說在這個方法中你可以對ModelAndView進行操 
	     * 作。這個方法的鏈式結構跟正常訪問的方向是相反的,也就是說先宣告的Interceptor攔截器該方法反而會後呼叫,這跟Struts2裡面的攔截器的執行過程有點像, 
	     * 只是Struts2裡面的intercept方法中要手動的呼叫ActionInvocation的invoke方法,Struts2中呼叫ActionInvocation的invoke方法就是呼叫下一個Interceptor 
	     * 或者是呼叫action,然後要在Interceptor之前呼叫的內容都寫在呼叫invoke之前,要在Interceptor之後呼叫的內容都寫在呼叫invoke方法之後。 
	     */  
	    @Override  
	    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {   
	        response.setContentType("text/html;charset=UTF-8");
	    }  
	    
	    /** 
	     * 該方法也是需要當前對應的Interceptor的preHandle方法的返回值為true時才會執行。該方法將在整個請求完成之後,也就是DispatcherServlet渲染了檢視執行, 
	     * 這個方法的主要作用是用於清理資源的,當然這個方法也只能在當前這個Interceptor的preHandle方法的返回值為true時才會執行。 
	     */  
		@Override  
	    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
	    	try {
				HttpSession session = request.getSession();
				TBaseMember onlineUser = (TBaseMember)session.getAttribute(Constants.SESSION_USER_INFO);
				if(onlineUser!=null){
					TSysOperateLog ywjcSysOperateLog=new TSysOperateLog();
					//記錄日誌
					String requestUri = request.getRequestURI();  
					String contextPath = request.getContextPath();  
					String url = requestUri.substring(contextPath.length());  
					ywjcSysOperateLog.setOperator(onlineUser.getId());
					ywjcSysOperateLog.setOpTime(new Date());
					ywjcSysOperateLog.setRequestUri(url);
					ywjcSysOperateLog.setIpAddress(CTools.getIpAddress(request));
					if (handler  instanceof HandlerMethod) {  
						  HandlerMethod methodHandler = (HandlerMethod) handler;  
						  //獲取訪問方法的註解
						  SysLog sysLog = methodHandler.getMethod().getAnnotation(SysLog.class);  
						  if (sysLog!=null) { 
							  ywjcSysOperateLog.setContent(sysLog.remark());
							  ywjcSysOperateLog.setOpModule(sysLog.operationModule());
							  ywjcSysOperateLog.setOpType(sysLog.operation());
							  //獲取請求的引數
							  Map parameters = request.getParameterMap();  
							  if (parameters != null) {  
						     //獲取 他們請求資料的引數
		    	                 String requestParameters = RequestMapUtil.readjson(request).toString(); 
		    	                 ywjcSysOperateLog.setRequestParameter(requestParameters);
		    	              }  
							  tSysOperateLogService.save(ywjcSysOperateLog);
		    	    	  }
		    	     }
				}
			} catch (Exception e) {
				e.printStackTrace();
			}
	  }   
}

再自定義一個註解

通過註解再配置好的方法頭上寫入要記錄的商量, 那麼每次執行完方法後. 就會寫入資料庫了.

 

相關推薦

定義註解+springMVC配置攔截記錄使用者操作日誌.(寫入資料庫)

springMVC掃包下的分支配置檔案, 注入攔截器 攔截器的內容: (監聽儲存日誌資訊) @SuppressWarnings({"unchecked","rawtypes"}) public class CommContextInterceptor implemen

SSH開發 | 配合定義註解 和 Stratus攔截,實現 方法級粒度 用戶鑒權

struts OS action gin 所有 具體實現 getmethod red nal 1.提要   本文是 小小商城-SSH版的 細節詳解系列 之一,項目 github:https://github.com/xenv/S-mall-ssh 本文代碼大部分在 gith

Springboot中使用定義註解設定請求攔截

Springboot中想要使用自定義註解需先新增基礎依賴 <parent>           <groupId>org.springframework.boot</groupId>           <artifactId&

定義註解,實現攔截

資訊網站專案      存在登入和未登入兩種狀態的操作,呼叫後臺方法需要進行判定是否登入。 此時攔截器派上用場 //攔截器用處(來源:跟著開濤學SpringMVC) 1、日誌記錄:記錄請求資訊的日

Spring Boot 使用攔截記錄使用者操作日誌

前言 上篇檔案主要是講了如何使用aop記錄使用者操作日誌,這篇檔案將介紹如何使用攔截器記錄操作日誌 匯入依賴 在處理請求引數時需要用到Json,其他依賴請檢視原始碼 <!-- Json解析 --> <dependency> <

BOS項目 第2天(BaseDao、BaseAction、用戶登錄、定義strust登錄攔截

XML sage pdm nat cls his jquer als 是否一致 BOS項目 第2天 今天內容安排: 1、根據提供的pdm文件生成sql 2、持久層和表現層設計---BaseDao、BaseAction 3、實現用戶登錄功能 4、jQuery EasyUI

SpringMVC 配置攔截 HandlerInterceptor

目錄 一、實現思路 二、具體實現 三、HandlerInterceptorAdapter  一、實現思路 在 SpringMVC 或者 SSM 環境的專案下,新建一個攔截類,繼承 HandlerInterceptor 介面,然後實現接口裡面的三個方法,接著在 pre

spring boot通過定義註解和AOP攔截指定的請求

本文主要通過切面類和自定註解的方式,攔截指定的介面(程式碼中已經作了詳細的說明) 目錄 一 準備工作 三 切面類 五 測試結果  一 準備工作 1.1 新增依賴 通過spr

SpringMVC配置+攔截interceptor

SpringMVC_Config.xml <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http

筆記:springmvc配置攔截

SpringMVC 中的Interceptor 攔截請求是通過HandlerInterceptor 來實現的。在SpringMVC 中定義一個Interceptor 非常簡單,主要有兩種方式:第一種方式是要定義的Interceptor類要實現了Spring 的HandlerI

spring 定義註解實現登陸攔截

需求:自定義一個註解,使得controller層的類或者方法在寫上這個註解後,會有登陸驗證。實現原理:(1)先寫一個自定義註解,註解上可以通過註釋確定是類/方法可以加此註解。(2)之後,寫一個攔截器,攔截器內可以通過handler得到被攔截器攔截的類或者方法,之後可以通過這個

利用Java 動態代理,定義註解 讀取配置檔案中的屬性值

Java動態代理在一些中介軟體中經常用到,或者一些大型專案中都會用到。 這裡順帶使用一下自定義註解方式,基於java 反射機制讀取.properties格式檔案。 demo的大致內容包含以下: 1.配置檔案:config.properties url=http://www.

定義註解進行許可權攔截

什麼是註解? 用一個詞就可以描述註解,那就是元資料,即一種描述資料的資料。所以,可以說註解就是原始碼的元資料。比如,下面這段程式碼: @Override public String toString() { return "This is String Repre

struts2中定義使用者session失效攔截

一、自定義攔截器類,繼承MethodFilterInterceptor類,並重寫doIntercept方法編寫攔截邏輯。(MethodFilterInterceptor類相比AbstractInter

Java定義註解springMVC攔截 配合使用記錄系統操作日誌的案例

自定義註解的用法, 好多人不知道, 在這裡, 程式碼的註釋中, 我已經詳細的介紹了, 另外就是很多人不知道自定義註解如何使用, 這裡配合springMVC攔截器, 做一個非常實用的案例. 案例: 記錄系統操作的日誌 首先是定義註解: package cn.wxy.ssm

SpringMVC攔截定義註解

tor spring system image ssi 定義 技術分享 style gets 一、攔截器   1、攔截所有URL <mvc:interceptors> <bean class="myInterceptor.MyIntercept

SpringMVC利用攔截攔截定義註解

前幾篇文章裡寫了關於token的個人思考,那麼具體在程式碼中要怎麼實現攔截token,今天寫了一段程式碼,記錄一下 框架:SpringMVC Spring 執行環境:tomcat8 說一下思路: 1.自定一個註解,然後註解在我的Controller方法上 2.實現Sprin

【Spring MVC攔截+logback日誌+定義註解】實現使用者鑑權登陸和訪問日誌記錄

摘要說明: 專案中經常這樣的需要  1. 登陸鑑權:比如使用者瀏覽器發出某個請求的時候我們需要判斷這個使用者是否已經登陸,也就是cookie中是否有他的登陸資訊。 2. 訪問日誌記錄:使用者訪問請求的時候我們有必要記錄訪問者的身份資訊以及訪問了哪個url,請求引數是什麼,這

使用springmvc攔截+定義註解做許可權管理

1、自定義註解: 如圖:@Target說明了Annotation所修飾的物件範圍:Annotation可被用於 packages、types(類、介面、列舉、Annotation型別)、型別成員(方法、構造方法、成員變數、列舉值)、方法引數和本地變數(如迴

Struts2配置攔截定義棧時拋異常:Unable to load configuration. - interceptor-ref - file:/D:/tomcat_install/webapps/crm/WEB-INF/classes/struts.xml

註意 其他 默認 才會 eba staf -i sta fault 代碼如下: <interceptors> <!-- 註冊自定義攔截器 --> <interceptor name="LoginInterceptor" class="co