【问题标题】:Log every unique visit of an user without JSESSIONID记录没有 JSESSIONID 的用户的每次唯一访问
【发布时间】:2013-01-27 03:36:21
【问题描述】:

我正在尝试在我的应用程序日志中记录一个唯一标识符,该标识符将清楚地跟踪用户在 Spring MVC 应用程序中的每次访问。目的是将此标识符存储在 cookie 中,并 grep 查找与该标识符匹配的日志。当 QA 或客户支持遇到应用问题时,他们将提供来自 cookie 的标识符的值,并且可供应用开发团队用于搜索和排除故障。

我不想使用 JSESSIONID,因为它可能被劫持。我目前正在记录时间戳和用户 ID,但当用户可以同时从多个浏览器登录时,这无济于事。

Spring 是否提供任何特性来支持这一点?如果没有,有没有办法仍然使用 JSESSIONID 但防止会话劫持?

【问题讨论】:

  • 您不想禁止一个用户可以拥有多个会话? SS会给你几乎免费的。我真的不明白你的设置。您使用用户 ID 意味着存在某种身份验证。因此,仍然使用 jsessionid 吗?
  • 我有一个使用 sha 证书的 WebSeal 身份验证。基本上,问题是如果我将所有会话 ID 集中记录在一个日志文件中,那么有权访问该日志的人和应用程序可能会误用它

标签: spring logging spring-security


【解决方案1】:

获取会话 ID (jsessionid) 并使用 SHA-1 或类似方法对其进行哈希处理。从理论上讲,哈希是不可逆的,但在输入是唯一的情况下是唯一的。

我们使用ServletFilter 将此值存储在 MDC (slf4j/log4j) 中,然后允许我们在日志模式中使用该值。示例:http://veerasundar.com/blog/2009/11/log4j-mdc-mapped-diagnostic-context-example-code/

【讨论】:

  • 谢谢@Marcel。我实际上是在使用 servlet 过滤器/MDC 来捕获会话 ID。我可以尝试散列它,或者我还读到可以随机生成 UUID。感谢您的建议。
  • @aprajitha,很高兴有帮助。请考虑accepting the answer给别人一个提示
猜你喜欢
  • 2022-12-20
  • 2020-09-01
  • 1970-01-01
  • 2018-02-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-28
  • 1970-01-01
相关资源
最近更新 更多