【发布时间】:2011-12-06 08:17:42
【问题描述】:
我有一个 Spring BlazeDS 集成应用程序。我想记录所有请求。
我打算使用过滤器。当我检查请求参数时,在我的过滤器中。它不包含与客户端请求相关的任何内容。如果我更改过滤器的顺序(我有 spring 安全性),那么它会打印一些与 spring 安全性相关的内容。
我无法记录用户请求。
感谢任何帮助。
【问题讨论】:
标签: apache-flex spring filter request blazeds
我有一个 Spring BlazeDS 集成应用程序。我想记录所有请求。
我打算使用过滤器。当我检查请求参数时,在我的过滤器中。它不包含与客户端请求相关的任何内容。如果我更改过滤器的顺序(我有 spring 安全性),那么它会打印一些与 spring 安全性相关的内容。
我无法记录用户请求。
感谢任何帮助。
【问题讨论】:
标签: apache-flex spring filter request blazeds
我通过使用 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);
}
}
}
【讨论】: