【问题标题】:How to add "Disable User" admin-feature in Java EE application?如何在 Java EE 应用程序中添加“禁用用户”管理功能?
【发布时间】:2013-03-03 19:34:36
【问题描述】:

我有一个 Java EE 应用程序,它使用 JDBCReal 作为 JAAS Context 在 GlassFish 3.1 上进行身份验证。下面是 JSF2.0 managedbean 中的身份验证代码 -

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),我应该这样做吗?或者,还有其他(标准)方式吗?

我想看看,这里是否有人在这方面有一些经验,可以为我指明正确的方向。

【问题讨论】:

    标签: java authentication jakarta-ee jaas jdbcrealm


    【解决方案1】:

    我假设您通过 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 在密码前面加上 !(或任何其他字符串)即可。

    当然这不适用于明文密码。

    另一个解决方案是从数据库中删除用户的角色。在这种情况下,用户可以登录,但如果您在web.xml 中设置好security-constraints,用户将无法执行任何操作(注销除外)。

    【讨论】:

    • 非常感谢您的意见。 +1 根据您的想法,我没有在 users 表中再添加一列“状态”。但基本上我想看到的是是否有必要手动检查用户是否存在,如果是,是否禁用或启用,然后仅在用户存在并启用时才进行登录。
    • 不需要手动检查,login() 方法/JDBCRealm 为您完成。但是如果您想打印更详细的错误消息(“登录失败,禁用用户”,而不仅仅是“登录失败”),您必须使用 JDBC/JPA 手动检查它。 (也检查答案更新。)
    • 只是需要有人确认一下。谢谢你。我会接受你的回答。
    猜你喜欢
    • 1970-01-01
    • 2011-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-22
    相关资源
    最近更新 更多