【发布时间】:2014-12-11 15:23:05
【问题描述】:
我正在使用默认的 JSF servlet 和 RestEasy servlet 来处理 URI 请求(Wildfly 8.1)。我希望使用@SessionScoped 支持bean 记录每个URI 请求。 CDI bean (@Named) 或 ManagedBean (@ManagedBean) 以便我可以记录来自该访问者的 http 请求。
我的要求:
- 我不想从每个 JSF 页面调用访问记录, 也不是来自每个 REST 资源 Java 文件。
- 每个请求都必须可链接到 @SessionScoped 注释的支持 bean
Visit。Visit对象存储:- 用户(如果已识别)
- 开始访问
- IP 地址
- 列表中的n个URI请求:JSF资源请求和剩余资源请求
我的问题:
- 如何在 web.xml 中注册一个过滤器,将两个请求(无论是 JSF 还是 REST)记录到 @SessionScoped 带注释的支持 bean
Visit? - 如果我可以访问这个支持 bean,我如何确保它是同一用户的会话?我不清楚 Web 容器的会话管理。 Web 容器如何将请求映射到已知会话实例?通过默认 cookie?
当然,在 url-pattern /* 和 /restresources/* 上已经有一个 servlet 映射,不能为同一路径注册 2 个过滤器,可以吗? :
<filter>
<filter-name>UriLogger</filter-name>
<filter-class>com.doe.filters.UriAccessLogger</filter-class>
</filter>
<filter-mapping>
<filter-name>UriLogger</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
【问题讨论】:
-
我想把这些记录放到数据库中。我可能也可以使用 log4j 来做到这一点,并将输出发送到数据库而不是滚动日志文件。真的。但是,我认为过滤器应该这样做。如果效果很好,我会写一个并回答我自己的问题。无论如何,谢谢!