基於SSH2框架AspectJ的登入登出日誌實現

2021-08-25 20:32:50 字數 1766 閱讀 5048

通過之前一篇基於ssh2框架struts2***的登入驗證實現的文章,我們簡單的運用了***來實現功能,這次大象將在前面的基礎上再進行一次擴充套件,運用aspectj aop切面實現登入登出日誌的功能。

aop切面是乙個非常不錯的特性,為我們帶來了一種新的程式設計方式,對**的無侵入性是它最大的特點。像上篇我們用到的struts2***就是aop的乙個典型運用。從spring的低版本開始就能夠實現切面功能,但是非常麻煩,不過當spring公升級到2.0之後,這一情況就徹底改變了。運用jdk 5.0支援的註解特性,大大方便了我們的開發。在本篇中,大象將以aspectj註解方式實現aop的切面功能。

在這裡我還是假設一下,你已經對spring aop有乙個基本了解,至少知道aop的基本概念,比如:切入點,通知,切入表示式,橫切邏輯等等內容。那麼只需要在之前的基礎上做下小小的改變,就可以使用aspectj實現日誌的登入登出功能。

增加日誌表

記錄日誌資訊當然需要日誌表了,我們在資料庫中增加乙個log表。

增加實體類

增加log實體類,欄位名與屬性名一致,這樣就可以不用加column註解了。另外沒有其它的關聯關係,這個類很乾淨,是乙個純pojo類。

具體請看原始碼,這裡就不貼出來了。

增加切面類

這就是本篇的關鍵所在了,定義切面類。在

common包下面再增加乙個aop包,建立logaspect類。

在logaspect類之上標明@aspect註解,指定此類為乙個切面類。這樣的實現方式是不是很簡單?然後定義切入點與通知型別以及切入實現(一般叫做橫切增強,其實就是切入之後想實現的功能)。這裡我實現了兩個切入方法,乙個是登入,當執行完登入操作,還沒有轉向到結果頁面時執行;另乙個是登出,在執行登出之前呼叫橫切邏輯。最後乙個是共用的儲存日誌方法

,這裡只是簡單的說明日誌記錄如何實現,可以對日誌表進行擴充,比如增加使用者

id 、

ip 位址、模組

id 等等資訊。

@before和@after都是通知型別,前者是在連線點之前執行,後者則是在連線點之後執行。

修改struts.xml

增加一行配置<

constant

name

="struts.objectfactory.spring.autowire.alwaysrespect"

value

="true"

/>

,作用是確保spring的自動裝配策略總是被考慮。預設為false,如果不將它改為true,則在使用cglib**action類後,使用@autowired注入的service類將會為null,那麼這些目標方法中與資料庫互動的邏輯都不能執行,所以一定要將它改為true。

新增<

aop:aspectj-autoproxy

proxy-target-class

="true"

/>

宣告,為spring容器中那些匹配@aspectj切面的bean建立**,其中的proxy-target-class

="true"

表示使用cglib動態**技術織入增強,不過只宣告還不行,還得織入,把編寫好的切面類完整路徑新增到配置檔案中,這樣才能發揮切面的功能。

到這裡,所有工作都已經完成,啟動伺服器,來試一下,看看登入登出後,log表中是否會有記錄?呵呵,當然會有了,要是沒有大象也不敢寫出來找罵了。通過這個例項,我們可以看到,運用aop的思想可以進行無侵入式的開發,這符合當前非常強調的松耦合性,對以後的維護來講也相對會簡單一些。

ssh2框架搭建

1.加入spring 1.加入spring jar spring required all 2.配置web.xml檔案 alt 方向鍵上 contextloaderlistener contextloaderlistener contextconfiglocation org.springframe...

基於SSH2框架下的 使用者註冊 驗證碼功能

jsp頁面 驗證碼 js 驗證碼 chknumber click function struts.xml檔案配置 image jpeg inputstream action處理 輸出流 private bytearrayinputstream inputstream 驗證碼獲取 public str...

JSP基於SSH2教務選課成績管理系統

執行環境 jkd7 8,tomcat7 8,mysql5.5 技術 ssm ajax bootscrap css jq js 功能 使用者 登入 密碼md5加密 註冊,修改密碼,收貨位址管理,購物車,確認支付訂單修改收貨位址,新增備註,待支付訂單,待發貨訂單,待收貨訂單,待評價低訂單,已完成訂單,申...