【问题标题】:Password in database different from password obtained with spring security数据库中的密码与使用 Spring Security 获得的密码不同
【发布时间】:2021-07-30 16:44:16
【问题描述】:

我正在使用 Spring Security 从 MySql 数据库中读取用户密码。问题是,从数据库中获取的密码似乎与存储在数据库中的密码不同,所以我遇到了身份验证错误。

更奇怪的是,在应用程序重新启动后,我似乎不断收到不同的密码。由于我真的找不到类似的主题,我确信我忽略了一些基本的东西,但我就是看不到在哪里。这是我的配置:

    @Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {

    auth.jdbcAuthentication()
            .dataSource(dataSource)
            .passwordEncoder(new PasswordAuthentication())
            .usersByUsernameQuery("SELECT user_name, user_password, verified "
                    + "FROM user_details "
                    + "WHERE user_email = ?")
            .authoritiesByUsernameQuery("SELECT user_name, user_role_desc "
                    + "FROM user_details "
                    + "WHERE user_email = ?");
}

PasswordEncoder 是自定义的,但据我了解,Security 应该只调用 match 方法:

public boolean matches(CharSequence password, String token)
{
    System.out.println(password);
    System.out.println(token);

这就是我看到令牌与存储在数据库中的令牌不同的地方,即使模式相同。

我有一个 UsernamePasswordAuthenticationFilter 但没有其他自定义实现。链中的其他内容是否修改了从数据库中获取的密码?

编辑: 数据库中的密码是:

$22$17$9GD7-A8_W4h9q4_uJ-fFSMhJjKMIbKNJng-G6IfzNCQ

如果我打印出 jdbcAuthentication 返回的 - 应该是相同的 - 密码,那么我会看到:

密码 1: $22$17$c-gMYpcX5d0YOgf6HBs19MuImTq7wb41tBeKSTw1mMw

只要我不重新启动应用程序,日志中的内容就会保持不变。如果我重新启动,那么它会有所不同,例如:

$22$17$zG0Ph1AM9_xAADIR8l01JVkCNzNwk_s0Z4VJt49NSiU

然后第三次: $22$17$B4y1Yr8Mt0QuuMg-AK6x02RyAZlQVnbo9A6KKEYitlE

等等。但只要我不重新启动应用程序,jdbcAuthentication 返回的密码就会保持不变——只是不是数据库中的密码。

【问题讨论】:

    标签: spring spring-security


    【解决方案1】:

    我想我明白了。错误在于,我认为 usersByUsernameQueryauthoritiesByUsernameQuery 默认情况下都是使用从请求中提取的值进行准备的。

    事实并非如此。 authoritiesByUsernameQuery 使用usersByUsernameQuery 返回的第一列的结果进行准备。这破坏了流程,因为我在验证中使用了电子邮件地址,但在第一个查询中我仍然选择返回 user_name,因此权限查询失败。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-04-19
      • 2013-08-11
      • 2013-06-23
      • 2020-08-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多