【发布时间】:2012-11-09 14:01:46
【问题描述】:
我创建了一个拦截器,其方法使用 @AroundInvoke 注释来记录方法调用和相关的计时。这是基于 Richard Hightowers 在 CDI AOP http://java.dzone.com/articles/cdi-aop) 上发表的优秀博文:
@AroundInvoke
public Object log(InvocationContext ctx) throws Exception {
Logger logger = Logger.getLogger(ctx.getTarget().getClass().getName());
logger.trace("ENTERING : "+ctx.getMethod());
long start = System.currentTimeMillis();
Object returnMe = ctx.proceed();
long executionTime = System.currentTimeMillis() - start;
logger.trace("EXITING : "+ctx.getMethod()+":"+executionTime+"ms");
return returnMe;
}
我想记录用户的会话 ID,以便我可以轻松地分析用户通过应用程序的路径。如何获取用户的会话?
我查看了注入 SessionContext,但看不到如何使用 API 来提取此值。
我查看了 log4j MDC,但我希望避免添加 servlet 过滤器的需要。
【问题讨论】:
-
你是在使用 servlet + jsp 还是 JSF?
-
我们正在使用 JSF 2、EJB 3.1 和 JPA 2
-
那么你想要 HTTP session id 还是 EJB session id?
-
为什么不使用会话侦听器将其拉出并将其保存在 SessionScoped 存储对象中?
-
@LightGuard - 谢谢我会试一试
标签: java logging java-ee-6 cdi interceptor