2011-09-17 67 views
-1

我需要將一些審計日誌添加到某些不在Web層中的業務方法。其中一個要求是在此審計日誌中存儲執行業務方法的用戶和遠程終端的IP。我決定使用AspectJ來審計所有這些方法,以免污染他們沒有商業代碼。 (注:我沒有使用Spring,這是一個古老的Struts 1的webapp)如何在AspectJ中獲取HTTPServletRequest

public void myMethod(Object param, HttpRequest request**){ 
    //Bussiness code that never use request param 
} 

@After("bla bla matches myMethod") 
public void myAdvice(JoinPoint jp){ 
    Object request = (HttpServletRequest)jp.getArgs()[1]; 
    //bla bla using the request to get user and IP 
} 

所以我的問題是,沒有任何人有任何建議,以獲得在諮詢一個更好的或優雅的方式Servlet的請求?事實上,myMethod不包含審計代碼(這真的很好),但現在有了第二個參數,它不會被方法直接使用,並且可能會讓其他開發人員感到困惑。請不要推薦我去諮詢Servlet而不是業務方法。

+0

也許你可以使用this()或args()切入點。 – alehro

回答

0

myMethod記錄IP已經將該方法綁定到Web層(或至少是具有有意義的IP地址的層)。顯然,HttpServletRequest並不合適,但提供有關呼叫上下文的「有用」信息的實現將是。

如果目標是消除任何額外的參數來myMethod,我首先想到的是創建一個RequestProcessor存儲在ThreadLocal「有用」的信息,這將被記錄方面使用。

+0

這正是我所期待的。就像你說的我不能從Webtier中分離日誌記錄,但我不想將業務邏輯綁定到webtier。感謝名單! – Ricardo

相關問題