我想知道是否有办法在Liferay 6.2中记录所有登录尝试。我的目标是监控所有登录尝试(成功和失败),这样我就可以构建一个ELK仪表板,看看是否有突然出现的峰值。 faild login attemts - 也许是因为某种机器人正在渗透我的网站。
到目前为止,我没有找到任何默认设置或函数来使用其凭据记录所有登录。我想查看哪个用户名也尝试登录。
如果有登录前和登录后的事件,我可以在钩子中使用,对我来说也没关系。我会自己处理日志记录任务。可悲的是,到目前为止,我的尝我无法在我的日志字符串中包含凭据。
答案 0 :(得分:3)
没有开箱即用的功能。
但是,正如Liferay中常见的那样,您有两种选择:
市场上有一个可以满足您需求的插件:Audit EE
我从来没有用过它,所以我无法告诉你任何事情。
如果您对它提供的选项不满意,这里是自己编写插件解决方案:
如果您只想记录失败的尝试,则需要实现AuthFailure
类:
public LogLoginFailures implements AuthFailure {
public void onFailureByEmailAddress(long companyId, String emailAddress,
Map<String, String[]> headerMap,
Map<String, String[]> parameterMap) throws AuthException {
MyLoginLogUtil.logFailure(emailAddress);
}
// Implement the two other onFailure... methods the same way
}
您需要自己编写MyLoginLogUtil
。您可以使用您将使用 Liferay Service Builder 创建的Liferay服务。
要宣布您的AuthFailure
个实例,您只需将其添加到portal-ext.properties
:
auth.failure=com.liferay.portal.security.auth.LoginFailure,...LogLoginFailures
该属性存储处理程序列表。您应该保持默认LoginFailure
具有存储每个用户上次失败登录尝试的默认行为。
如果您确实要记录所有登录尝试,可以在portal-ext.properties中的Authenticator
属性中添加auth.pipeline.post
:
public LogLoginFailures implements AuthFailure {
public int authenticateByEmailAddress(long companyId, String emailAddress,
String password, Map<String, String[]> headerMap,
Map<String, String[]> parameterMap) throws AuthException {
MyLoginLogUtil.logSuccesss(emailAddress);
return SUCCESS;
}
// Implement the two other authenticate... methods the same way
}
这将记录成功的登录尝试。
你也可以在auth.pipeline.pre
属性中添加一个Authenticator作为第一个处理程序,但是它无法区分失败和成功的登录。