我们如何防止Liferay管理员用户(具有管理员角色)登录公共URL

时间:2018-12-05 07:12:07

标签: liferay

我们有一个公共URL-URL1和一个私有URL-URL2

我们想要一个管理员用户,该用户只能在私有URL2中以admin(具有admin角色)身份登录。 如果同一用户尝试从公共URL1登录,则应允许他以非管理员用户身份登录(没有管理员角色),即应阻止他从公共URL1以管理员用户身份登录。

我们如何防止Liferay管理员用户(具有管理员角色)登录到公共URL,而应该允许他以非管理员用户身份从公共URL登录

1 个答案:

答案 0 :(得分:1)

创建一个Lifecycle Event,例如如记录的模板中所述的“登录前操作”(或-post-)。在其实现中,您可以访问LifecycleEvent,该事件封装了原始的HTTP请求/响应。这样,您可以确定谁正在登录以及他们从哪个端点连接。根据您的条件进行验证,然后发送适当的重定向。

编辑:在您评论这可能是主要的性能问题之后:

  • 首先,当您测量并提供数字后,我只相信这是一个主要的性能问题。
  • 第二,您使用的是login.events.pre,而不是链接的默认组件键key=servlet.service.events.pre,您可能想尝试login.events.post
  • 第三,您可能无意中找到了正确的实现。请注意,Web登录可能会随浏览器一起传播:会话未绑定到某个IP地址。从特权网络登录后,管理员可以轻松地休眠笔记本,将其带到隔壁的星巴克,然后再次打开。除非您正在检查每个请求,否则该会话(除非超时)将完全有效以允许从星巴克Wifi进行特权访问。

如果您对性能确实很挑剔,则可能希望找到一种非数据库机制来存储已检查访问权限的标志-例如在会话中存储批准的浏览器的地址。哇,我不会猜到我会公开提议在会议中存储一些东西。

但总的来说:性能问题是可以衡量的。阅读代码很少会发现性能问题,或者至少不能发现值得解决的问题。