Как добавить функцию «Отключить пользователя» в приложение Java EE? - PullRequest
2 голосов
/ 07 октября 2011

У меня есть приложение Java EE, которое использует JDBCReal как JAAS Context для аутентификации на GlassFish 3.1.А ниже приведен код аутентификации в управляемой JSF2.0 -

FacesContext context = FacesContext.getCurrentInstance();
HttpServletRequest request = (HttpServletRequest) context.getExternalContext().getRequest();
try {
    if (request.getUserPrincipal() != null) {
        request.logout();
    }
    if (request.getUserPrincipal() == null) {
        request.login(this.username, this.password);
    }

Я пытаюсь добавить некоторые функции администратора (например, создать / удалить / обновить / отключить пользователя).Я почти закончил со всеми из них, за исключением «отключить», что сбивает меня с толку о том, как действовать.

Единственный способ, о котором я могу думать прямо сейчас, - это добавить поле, что-то вроде "статус », в таблице« пользователи », которая будет иметь значение (« включено »или« отключено »).И проверьте этот «статус» перед выполнением аутентификации.

Это то, как я должен это сделать, учитывая, что я использую JAAS (JDBCRealm)?Или есть какой-то другой (стандартный) способ?

Я пытаюсь выяснить, есть ли здесь кто-то, кто имеет некоторый опыт в этой области и может указать мне правильное направление.

1 Ответ

1 голос
/ 12 октября 2011

Полагаю, вы управляете таблицей пользователей через JDBC / JPA.

В unix / linux passwd -l меняет хэш на недопустимое значение.От man passwd:

 -l   This option is used to lock the specified account and it is
      available to root only. The locking is performed by rendering
      the encrypted password into an invalid string (by prefixing the
      encrypted string with an !).

На практике открытая учетная запись от /etc/shadow:

test:$6$c7Lz2A2l$8AoSBy8C2U7uUns4aDRP2J/QRzUOYF...o69XPR/:15259:0:99999:7:::

И такая же учетная запись после passwd -l test:

test:!$6$c7Lz2A2l$8AoSBy8C2U7uUns4aDRP2J/QRzUOYF...o69XPR/:15259:0:99999:7:::

Префиксное значение недопустимо, поскольку хеш-функции всегда возвращают одинаковое количество битов.Если ваше сохраненное значение длиннее этой длины, они никогда не будут совпадать.Вы можете сделать то же самое с вашими хешированными паролями - просто добавьте к префиксу ! (или любую другую строку) через JDBC / JPA.

Конечно, это не работает с паролями в незашифрованном виде.

Другое решение - удаление ролей пользователя из базы данных.В этом случае пользователь может войти в систему, но если вы настроите скважину security-constraint в web.xml, пользователь не сможет ничего сделать (кроме выхода из системы).

...