java - Shiro自定义认证逻辑

标签 java authentication jdbc shiro

我对使用 Shiro 进行用户身份验证有以下要求:

  1. 用户名和密码必须与数据库中存储的用户名和密码匹配。如果用户名和密码不匹配,则应显示一条错误消息,指示身份验证失败。
  2. 帐户必须处于 Activity 状态 - 用户通过激活电子邮件激活其帐户。如果用户的帐户未激活,则应显示一条错误消息,表明他们尚未点击激活电子邮件。
  3. 帐户不得过期 - 用户帐户有一个过期日期。如果用户的帐户已过期,则应显示一条错误消息,指示帐户已过期。

注意:有两个数据库用于存储用户信息。其中一个数据库存储身份验证信息(用户名和密码),另一个数据库存储帐户过期时间等信息。

只需在 shiro.ini 中配置 JDBC 领域,我就可以轻松完成第一个要求。

我猜测需要实现一些自定义 Java 逻辑才能完成要求 2 和 3。有关如何实现上述内容的任何提示吗?我需要实现自定义领域吗?

最佳答案

实现此目的的一种方法是创建自定义领域。

我们也有一些关于身份验证的自定义要求。我们通过创建自己的自定义领域实现来实现这一点。我们扩展了 AuthorizingRealm 并重写了 doGetAuthenticationInfo 方法来检查是否可以检查用户的登录情况。您可以将案例 2 和 3 放在那里。

如果您仅在 Web 环境中使用 shiro,您可能会考虑覆盖 Standation authc 过滤器并覆盖 isAccessAllowed 方法,如果用户尚未激活或过期,您可以实现一些自定义重定向。

关于java - Shiro自定义认证逻辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18885128/

相关文章:

java - 基于表单的身份验证 : renaming <form-login-page>

java - java如何获取单独的颜色分量?

asp.net - 授予使用 Azure AD 登录的权限

Android HttpClient 身份验证总是返回 401 代码

java - 结果集中的行存储位置

java - 如何验证 reCAPTCHA V2 Java (Servlet)

java - Vaadin 和 JPA 容器,是否存储 beans

ruby-on-rails - Rails 中可能出现 HTTP 基本自定义错误?

java - 如何在关闭 Java 连接之前返回 ResultSet

mysql - 我无法连接到 MySQL 数据库