在Liferay 7 Enterprise Edition中,
我想在每个请求中自动在外部日志文件中记录诸如user_name之类的用户信息,以跟踪用户活动,该怎么做?
不使用审核插件
例如,当我尝试登录帖子请求(登录)时,它不包含有关用户的任何信息?!
答案 0 :(得分:0)
看下面的代码: https://github.com/amusarra/liferay-portal-security-audit
特别是捕获登录事件的portal-security-audit-capture-events模块。
答案 1 :(得分:0)
这似乎是过滤器的工作,用户信息通常是从themeDysplay中提取的,例如:
Depends { name: "Qt.qios" } // I think that's the name...
如果您想跟踪特定的portlet,则OSGi portlet过滤器可以完成这项工作。
答案 2 :(得分:0)
这种事情比您想象的要难得多...
访问当前用户真的很容易。正如Victor指出的那样,您可以使用ThemeDisplay对象来获取当前用户。如果没有请求,则可以使用PrincipalThreadLocal查找当前用户ID。
这为您提供了谁,但肯定没有“用户在做什么”方面。由于门户网站聚合了许多Portlet的HTML片段,因此从Servlet过滤器的角度来看,很难看到传入URL上的哪些可用Portlet实际上正在与之交互。您可以尝试使用portlet过滤器来缩小字段的范围,但这只会告诉您正在访问的portlet,而不是它们正在做什么。
尽管您拒绝了DXP中提供的内置审核功能,但这确实是跟踪门户网站中谁做了什么的答案,因为它具有将这两部分整合在一起的必要接触点。
现在,如果由于需要文件而不是数据库条目而拒绝了内置审核功能,则很容易解决。转到“系统设置”控制面板,然后找到“日志记录审核消息处理器”并将其启用。它将审核事件以CSV格式写到文件中,但是您应该具有模块/ apps / foundation / portal-security-audit / portal-security-audit-router / src / main / java / com / liferay的源/portal/security/audit/router/internal/LoggingAuditMessageProcessor.java,因此您可以以此为基础编写自己的格式。