当前位置: 首页 > 知识库问答 >
问题:

在身份验证之前检查用户启用状态-Spring Security

呼延烈
2023-03-14

在loadByUserName()方法中,我通过邮件找到用户。目前,我的用户类使用isEnabled()方法实现UserDetails,以检查用户是否已启用。然而,在身份验证之前会检查这个启用标志,这样任何人都可以发现另一个用户的帐户是否启用,无论使用什么密码。有没有办法在身份验证后检查启用标志?

我的用户类:

@Entity
public class User implements UserDetails {

    @Column(name = "ativo")
    private Boolean ativo;

    //... some attributes, getters and setters

    @Override
    public boolean isEnabled() {
        if(this.ativo){
            return true;
        }else{
            return false;
        }
    }
}

My loadUserByUsername()方法:

@Override
public User loadUserByUsername(String mail) {
    List<User> users = manager.findUserByMail(String mail);

    if (pessoas.isEmpty()) {
        throw new RuntimeException("User not found!");
    } 
    return users.get(0);
}

我更改了默认消息,以防凭据不良或用户禁用:

messages.properties:

AbstractUserDetailsAuthenticationProvider.badCredentials = Mail/Password is incorrect!
AbstractUserDetailsAuthenticationProvider.disabled = User disabled!

共有1个答案

堵才哲
2023-03-14

我想用一种你不仅可以在这种情况下,而且可以在其他类似情况下使用的方式来回答这个问题。

应用程序的用户如何理解代码中发生了什么?他对您的代码一无所知,但我们(作为开发人员)是那个告诉他们场景后面发生了什么以及首先使用消息执行哪个方法的人。属性。

如果您不通知他们,他们就无法知道先执行哪个方法。因此,您可以将这两个属性更改为相同的消息,例如“密码不正确”。

这正是Linux操作系统中发生的事情,当你想用不存在的用户名登录时,linux不会告诉你用户不存在,即使用户不存在,它也会让你输入密码,然后通知你密码不正确。因为通常我们不应该给做恶意行为的人额外的信息。一般来说,这种信息对开发人员和监控目的非常有用。所以你应该想办法记录这种信息以备将来使用,但不要向用户展示。

 类似资料:
  • 我使用的是Spring Security 3.2.5。我使用ActiveDirectoryLdapAuthenticationProvider作为身份验证提供程序。但我想在通过Active Directory进行身份验证之前检查我的用户名和密码。例如,在通过Active Directory启动身份验证过程之前,我想检查用户名和密码是否不相等,其中是否没有空格,或者其大小是否小于特殊大小。 更新:S

  • 于是我在这里看到:https://firebase . Google . com/docs/auth/web/account-linking # link-auth-provider-credentials-to-a-user-account现在可以在Firebase中链接用户账号了。我还看到Firebase提供了匿名认证的功能,它为一个用户创建一个用户会话,不需要任何凭证。 在我们的应用程序中,

  • 情况 我想为我的web应用程序使用Azure B2C身份验证服务。但是,我希望应用程序管理员限制对某些电子邮件或域的访问,例如白名单,如下所示: tom1@abc.com tom2@def.com *@alphabet.com 因此,只有前两封电子邮件和任何以“alphabet.com”结尾的电子邮件才能访问该网站。 问题 我已经实现了所有功能,并且工作正常,但是我正在努力获取经过身份验证的用户的

  • 我正在研究使用JWT身份验证的Spring Security实现。我不确定如何检查用户角色并在方法级别获得经过身份验证的用户。我在网上看到这个例子: 我需要从JWT令牌中提取用户类型吗?还有其他方法可以实现吗?在我看来,仅使用是不完整的。 看起来这段代码是用来获得用户如果使用会话类型,我得到NPE。你知道对于JWT我如何才能成为用户吗? Github完整来源:https://Github.com/

  • 我一直在寻找使用各种AWS服务来处理我们下一个主要项目的基础设施。我们开始研究EC2实例上的docker容器,但在进一步研究AWS Lambda之后,这似乎是一条值得探索的道路。 使用AWS Lambda范例,我们只需使用Lambda函数作为逻辑粘合剂,将数据和事件(来自其他AWS服务)保存在一起。 例如,如果我们产品的用户创建了一个新记录,AWS Lambda可以在该事件中触发,我们可以调用La

  • 我正在使用Spring Boot的最新版本,并且正在尝试设置StatelessAuthenticaion。到目前为止,我一直在读的教程非常模糊,我不确定我做错了什么。我使用的教程是... http://technicalrex.com/2015/02/20/Stateless-Authentication-with-spring-security-and-jwt/ code>TokenAuthen