2011-12-06 50 views
2

我有一個Spring BlazeDS集成應用程序。我想記錄所有請求。使用過濾器記錄來自flex/BlazeDS客戶端的所有請求

我打算使用過濾器。在我的過濾器中,當我檢查請求參數時。它不包含與客戶端請求相關的任何內容。如果我改變過濾器的順序(我有彈簧安全),那麼它會打印一些與彈簧安全相關的東西。

我無法記錄用戶請求。

任何幫助表示讚賞。

回答

2

我已經通過使用AOP(AspectJ)向通信端點方法注入記錄器語句來完成相同的功能。 - 也許這也是你的替代方法。


/** Logger advice and pointcuts for flex remoting stuff based on aspect J*/ 
public aspect AspectJInvocationLoggerAspect { 

    /** The name of the used logger. */ 
    public final static String LOGGER_NAME = "myPackage.FLEX_INVOCATION_LOGGER"; 

    /** Logger used to log messages. */ 
    private static final Logger LOGGER = Logger.getLogger(LOGGER_NAME); 

    AspectJInvocationLoggerAspect() { 
    } 

    /** 
    * Pointcut for all flex remoting methods. 
    * 
    * Flex remoting methods are determined by two constraints: 
    * <ul> 
    * <li>they are public</li> 
    * <li>the are located in a class of name Remoting* within (implement an interface) 
    * {@link com.example.remote} package</li> 
    * <li>they are located within a class with an {@link RemotingDestination} annotation</li> 
    * </ul> 
    */ 
    pointcut remotingServiceFunction() 
     : (execution(public * com.example.remote.*.*Remote*.*(..))) 
     && (within(@RemotingDestination *)); 

    before() : remotingServiceFunction() { 
     if (LOGGER.isDebugEnabled()) { 
      Signature sig = thisJoinPointStaticPart.getSignature(); 
      Object[] args = thisJoinPoint.getArgs(); 

      String location = sig.getDeclaringTypeName() + '.' + sig.getName() + ", args=" + Arrays.toString(args);    
      LOGGER.debug(location + " - begin"); 
     } 
    } 

    /** Log flex invocation result at TRACE level. */ 
    after() returning (Object result): remotingServiceFunction() { 

     if (LOGGER.isTraceEnabled()) { 
      Signature sig = thisJoinPointStaticPart.getSignature();    

      String location = sig.getDeclaringTypeName() + '.' + sig.getName(); 
      LOGGER.trace(location + " - end = " + result);    
     } 
    } 
} 
+0

嗨,用於選擇過濾器的原因是我想處理所有類型的客戶,MVC和柔性的。我搜索了很多,最近我能找到的是http://www.spltech.co.uk/blog/struts-2/integrating-adobe-flex-with-struts-2-and-jboss-using-blazeds但是如果使用過濾器找不到乾淨的靈魂,那麼我必須切換到攔截器或AOP。所以你可以拋出一些光或一些鏈接,如何使用AOP做同樣的事情。 – Mukun

+0

@ user1057094:我已添加示例 – Ralph

+0

感謝您的示例。我會試一試。但我仍然想知道,如何使用過濾器來做到這一點。 – Mukun

相關問題