Как мы можем запретить пользователю-администратору Liferay (имеющему роль администратора) входить по общедоступным URL-адресам? - PullRequest
0 голосов
/ 05 декабря 2018

У нас есть общедоступный URL-адрес - URL1 и личный URL-адрес - URL2

Нам нужен пользователь-администратор, который может войти в систему как администратор (с ролью администратора) только в частном URL-адресе2.Если один и тот же пользователь пытается войти в систему с общедоступного URL1, ему должно быть разрешено войти в систему как пользователь без прав администратора (без роли администратора), т.е. он должен быть заблокирован для входа в систему в качестве пользователя с правами администратора с общедоступного URL1.

Как можно запретить пользователю-администратору Liferay (имеющему роль администратора) входить по общедоступному URL-адресу, вместо этого ему должно быть разрешено входить в систему как пользователь без прав администратора с общедоступного URL-адреса

1 Ответ

0 голосов
/ 05 декабря 2018

Создайте Событие жизненного цикла , например, "login-pre-action" (или -post-), ​​как в документированном шаблоне.В его реализации вы получаете доступ к LifecycleEvent, который инкапсулирует исходный HTTP-запрос / ответ.С этим вы можете выяснить, кто входит в систему и с какой конечной точки они подключаются.Проверьте это с вашими условиями и отправьте соответствующие перенаправления.

Редактировать: После вашего комментария, что это может быть серьезной проблемой производительности:

  • Во-первых, я только считаю, что это серьезнаяпроблема производительности, когда вы измерили ее и предоставили цифры.
  • Во-вторых, вместо того, чтобы использовать ключ компонента по умолчанию login.events.pre, вы используете key=servlet.service.events.pre, возможно, вы захотите попробовать login.events.post.
  • В-третьих, вы можете случайно нажатьправильная реализация.Обратите внимание, что веб-вход может проходить через браузер: сеанс не привязан к определенному IP-адресу.После входа в систему из привилегированной сети администратор может легко перевести свой ноутбук в спящий режим, перенести его в Starbucks по соседству и снова открыть.Сеанс (если не истек тайм-аут) будет вполне допустимым, чтобы разрешить привилегированный доступ из Starbucks Wifi, если вы не проверяете каждый запрос.

Если вы действительно требовательны к своей производительности, вы можетехотите найти механизм без базы данных для хранения флага, что доступ уже проверен - например, сохранить утвержденный адрес браузера в сеансе.Ничего себе, я бы не догадался, что я бы публично предложил что-то хранить в сессии.

Но в целом: проблема производительности была бы измеримой.Чтение кода может очень редко выявлять проблемы с производительностью, или, по крайней мере, не те, над которыми стоит работать.

...