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

Spring Security身份验证忽略密码

莫骞仕
2023-03-14

在我的项目中,我已经实现了Spring Security。它检查用户名和密码是否正确。我只想验证用户名,而不是密码。我怎样才能实现这一点?

public UserDetails loadUserByUsername(String username) {
    if (lan == null) {
    //  loadPasswordRules();
    }

    List<UserDetails> users = loadUsersByUsername(username);
    if (users.size() == 0) {
        throw new AuthenticationServiceException("Username "  + username +  " is invalid ");
    }

    UserDetails user = users.get(0); // contains no IRole[]
    /** Raising exception since start and expiry of user is not valid.  */
    /** Raising exception since start and expiry of user is not valid.  */
    Date todayDate = new Date();
    if ( !((todayDate).after(((User) user).getStartDate()) && (todayDate).before(((User) user).getExpiryDate())) ) {
        throw new AuthenticationServiceException("User " + username + " account is expired.");
        /* throw new LockedException("User " + username + " account is expired.");
           throw new UsernameNotFoundException("User {" + username + "} account is expired."); SPRING_SECURITY_LAST_EXCEPTION.message */
    }

    /*if ( ((User) user).getLastSuccessLogin() != null) {
        Calendar newDate = Calendar.getInstance();
        newDate.setTime( todayDate );
        newDate.add(Calendar.DAY_OF_YEAR, - lan.intValue());
        Calendar oldDate = Calendar.getInstance();
        oldDate.setTime( ((User) user).getLastSuccessLogin() );
        if (newDate.after(oldDate)) {  
            lockUserAccount(username);
            throw new AuthenticationServiceException("User " + username + " account is expired.");
        }
    }*/

    Set<IRole> dbAuthsSet = new HashSet<IRole>();
    if (enableAuthorities) {
        dbAuthsSet.addAll(loadUserAuthorities(user.getUsername()));
    }
    List<IRole> dbAuths = new ArrayList<IRole>(dbAuthsSet);
    if (dbAuths.size() == 0) {
         throw new AuthenticationServiceException("Username " + username + " has no assigned roles.");
    }
    ((User) user).setRoles(dbAuths);
    return user;
}

共有1个答案

刘高峯
2023-03-14

您应该为此创建一个自定义过滤器过滤器应该扩展类AbstractAuthenticationProcessingFilter并返回一个自定义身份验证对象。然后身份验证提供程序将看到它并仅检查过滤器返回的用户名。完成所有操作后,您必须将过滤器配置到Spring Security上下文以使其正常工作。

您也可以在这里看到我的完整示例:http://phuonghuynh.github.io/java/spring/security/2015/09/06/spring-security-multiple-authentication-providers.html

 类似资料:
  • 问题内容: 这是我的情况: 一个Web应用程序对许多应用程序执行某种SSO 登录的用户,而不是单击链接,该应用就会向正确的应用发布包含用户信息(名称,pwd [无用],角色)的帖子 我正在其中一个应用程序上实现SpringSecurity以从其功能中受益(会话中的权限,其类提供的方法等) 因此,我需要开发一个 自定义过滤器 -我猜想-能够从请求中检索用户信息,通过自定义 DetailsUserSe

  • 我试图完成的是为我的 rest api 提供基于 jwt 令牌的身份验证。/api 下的所有内容只能使用令牌进行访问。 我在 Web 安全配置中具有以下配置方法: 这是过滤器: 我的问题是过滤器现在应用于每个url,而不仅仅是具有 /api前缀的url。 我知道我的“配置”方法可能是错误的,但它应该是什么样子?我想要完成的就是为/api路径使用过滤器。 1 个问题:为什么有两个值来配置将应用筛选器

  • 如果某个接口不需要进行验证工作,可以在@Api注解上设置属性ignoreValidate=true(默认false)。这样调用接口时,不会进行验证操作。 同样的,在@ApiService注解里也有一个对应的ignoreValidate属性,设置为true的话,Service类下面所有的接口都忽略验证。 忽略所有接口验证 设置ApiConfig.setIgnoreValidate(true),所有接

  • 我正在尝试在WooCommerce Webhook API和我的节点之间创建一个集成。js后端。然而,我真的不知道应该如何使用这个秘密来验证请求。 机密:一个可选的密钥,用于生成请求正文的HMAC-SHA256哈希,以便接收方可以验证webhook的真实性。 返回以下值: :pU9kXddJPY9MG9i2ZFLNTu3TXZA 85pnwfPqmr0dg0= 签名:PjKImjr9Hk9MmId

  • 身份验证 PDF版下载 企业应用中的URL链接可以通过OAuth2.0验证接口来获取员工的身份信息。 通过此接口获取员工身份会有一定的时间开销。对于频繁获取员工身份的场景,建议采用如下方案: 企业应用中的URL链接直接填写企业自己的页面地址; 员工跳转到企业页面时,企业校验是否有代表员工身份的cookie,此cookie由企业生成; 如果没有获取到cookie,重定向到OAuth验证链接,获取员工

  • 我制作了一个PDB,我可以通过sys作为sysdba连接到这个PDB,但是我不能连接我自己的普通用户或本地用户。 原因是ORA-01017:密码错误。 在sqlnet.ora中设置之后: 密码以quation标记开始结束,然后生效。 创建用户和登录用户的命令: 为什么?如何将SQLNET.ALLOWED\u LOGON\u VERSION\u SERVER升级到12。我可以设置没有引号的密码吗?

  • 电子邮件验证+电子邮件/密码验证的使用不适用于在用户开始使用服务之前绝对需要电子邮件验证的服务。 让我用Google sign in First的一个例子来解释。 首先,用户登录他们的Google帐户(比如电子邮件是),并授权您的应用程序。然后使用通过它接收到的令牌创建一个凭据,并与Firebase交换这些令牌以将用户登录到Firebase。用户需要存在于Firebase中,您才能使用Fireba

  • 我正在使用生成用户密码的强哈希值。我想登录用户,但不想通过网络以明文形式发送密码,如何检查密码是否正确(没有往返),因为它是加盐的? 我有一个客户端/服务器场景。客户端是台式计算机上的应用程序(不是网站,也不是超文本传输协议服务器)。 我怎样才能做到这一点?我只是走了这么远:我正在客户端上生成salt散列,从中形成一个mcf并将其发送到我的服务器。将mcf保存到数据库。我没有发送密码,只发送了实际