Широкая пользовательская логика аутентификации

У меня есть следующие требования для аутентификации пользователя с помощью Shiro:

  1. Имя пользователя и пароль должны совпадать с именем, которое хранится в базе данных. Если имя пользователя и пароль не совпадают, должно отображаться сообщение об ошибке, указывающее на потерю аутентификации.
  2. Аккаунт должен быть активным - пользователь активирует свою учетную запись через электронную почту активации. Если учетная запись пользователя не активна, должно появиться сообщение об ошибке, указывающее, что они не нажали на адрес электронной почты активации.
  3. Учетная запись не должна быть истек - учетные записи пользователей имеют срок действия. Если срок действия учетной записи пользователя истек, тогда должно появиться сообщение об ошибке, указывающее истечение срока действия учетной записи.

Примечание. Существуют две базы данных для хранения информации пользователя. Один из них хранит информацию аутентификации (имя пользователя и пароль), а другая база данных хранит информацию, например, по истечении срока действия учетной записи.

Я просто могу выполнить первое требование, просто настроив область JDBC в shiro.ini.

Я предполагаю, что некоторые пользовательские логики Java должны быть реализованы для выполнения требований 2 и 3. Любые подсказки о том, как реализовать вышеизложенное? Нужно ли мне реализовать пользовательскую область?

1 ответ

Один из способов сделать это - это создать собственное царство.

У нас были некоторые пользовательские требования и аутентификация. Мы внедрили это, создав собственную собственную реализацию области. Мы расширили AuthorizationRealm и переопределили метод doGetAuthenticationInfo, чтобы проверить, можно ли проверить пользователя для входа в систему. Вы можете разместить свои случаи 2 и 3.

Если вы используете только сиро в веб-среде, вы можете рассмотреть возможность переопределения стандартного фильтра authc и переопределить метод isAccessAllowed, мы можем реализовать какое-то пользовательское перенаправление, если пользователь еще не активирован или не истек.

licensed under cc by-sa 3.0 with attribution.