2011-09-17 19 views
-1

Web層にないビジネスメソッドに監査ログを追加する必要があります。要件の1つは、ビジネスメソッドを実行したユーザとリモート端末のIPをこの監査ログに格納することです。私はAspectJを使用して、これらのすべてのメソッドを監査し、ビジネスコードなしでそれらを汚染しないようにすることにしました。 (注:私は春を使用していないよ、これは古いのStruts 1のWebアプリケーションである)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 
} 

だから私の質問は、誰もがより良いかエレガントな方法でアドバイスでサーブレット要求を取得するためにどんな提案を持っているんですか?実際、myMethodにはAuditコード(実際には良い)は含まれていませんが、メソッドで直接使用されない別の開発者が混乱する可能性がある2番目のパラメータがあります。サーブレットの代わりにビジネスメソッドのアドバイスをしてください。

+0

おそらくthis()またはargs()ポイントカットを使用できます。 – alehro

答えて

0

myMethodからIPをログに記録すると、すでにこの方法がWeb層(または少なくとも意味のあるIPアドレスを持つ層)に結び付けられています。 HttpServletRequestは明らかに適切ではありませんが、コールのコンテキストに関する「有用な」情報を提供する実装が可能です。

目標はmyMethod任意の余分なパラメータを削除する場合は、私の最初に考えたのは、ロギングアスペクトによって使用されるThreadLocalで「有用な」情報を、格納RequestProcessorを作成することです。

+0

これはまさに私が探していたものでした。あなたが言ったように私はWebtierからのログを切り離すことはできませんが、ビジネスロジックをWebtierに結びつけたいとは思いませんでした。ありがとう! – Ricardo

関連する問題