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

如何使用没有密码编码的Spring security?

琴英华
2023-03-14

我正在学习Spring安全。我使用BCryptPasswordEncoder在将用户密码持久化到数据库之前对其进行编码

代码:

@Override
    public void saveUser(User user) {
        user.setPassword(bCryptPasswordEncoder.encode(user.getPassword()));
        user.setActive(1);
        Role userRole = roleRepository.findByRole("ADMIN");
        user.setRoles(new HashSet<Role>(Arrays.asList(userRole)));
        userRepository.save(user);
    }

然后在身份验证期间也使用它,用户得到了预期的身份验证。

@Override
    protected void configure(AuthenticationManagerBuilder auth)
            throws Exception {
        auth.
            jdbcAuthentication()
                .usersByUsernameQuery(usersQuery)
                .authoritiesByUsernameQuery(rolesQuery)
                .dataSource(dataSource).passwordEncoder(bCryptPasswordEncoder);
    }

然后,从configure()方法中删除了.passwordencoder(bCryptPasswordEncoder);,使用已编码密码的用户仍然能够成功地获得身份验证。

然后,我从saveuser()configure()方法中删除了password encoder,并将user持久化到数据库中(即没有密码编码),并尝试访问经过身份验证的页面,但我得到了accesseddeniedexception

但具有编码密码的用户仍然得到了身份验证,即使我从configure()方法中删除了Passwordencoder()。为什么会出现这种情况?

spring security默认情况下在身份验证期间使用密码编码器吗?

如果是,如何使用spring security而不使用密码编码?

共有1个答案

贾实
2023-03-14

Spring Security 5始终启用密码加密。默认情况下使用的加密是bcrypt。Spring Security5的精妙之处在于,它实际上允许您在密码中指定使用哪种加密来创建has。

请参阅Spring Security Reference Guide中的密码存储格式。简而言之,它允许您为您的密码加上一个众所周知的算法密钥的前缀。存储格式为{ }

当不使用任何内容时,它将变成{noop}your-password(它将使用noopPasswordEncoder{bcrypt}$A2.....将使用bcryptPasswordEncoder。有几种算法是开箱即用的,但您也可以定义自己的算法。

要定义自己的密码,请创建自己的PasswordEncoder,并在DelegatingPasswordEncoder的键下注册它。

 类似资料:
  • 有人请帮助我如何解决CWE-259:使用硬编码密码缺陷。

  • 我需要用电子邮件和密码提出请求。电子邮件和密码是发送到我的存储库类的字符串。密码需要用Base64编码。 我正在使用改装2。 我知道我需要使用类,但是我怎么才能发出请求呢? 这是来自 Rest 接口的代码: 在存储库中,我用这个对密码进行编码: 但是我需要用email和encodedPassword变量初始化requestBody来发出请求。 这真的是正确的方法吗? requestBody属性是如

  • 我试图scp使用2 linux服务器之间的密钥对。我想跟着http://sthen.blogspot.in/2008/03/sftp-i-java-with-jsch-using-private-key.html 我能够在linux服务器之间创建scp文件,但当我执行代码时,会收到错误com。jcraft。jsch。JSchException:UnknownHostKey。知道我做错了什么吗。 过

  • 问题内容: 我想用不带sudo密码的用户sa1运行ansible: 第一次可以: 第二次失败: 请帮忙! 问题答案: 这不是您的服务器的配置。确保允许sudo的用户使用并且无需密码即可使用。 要登录到服务器 使用以下命令打开sudoers文件 确保您有这样的一行: 用您的用户替换 保存文件 您可以通过运行以下命令从服务器本身进行尝试: 如果这可行,那么它也应该可以正常运行。

  • 我已经完成了用户注册和登录。但是我想在创建配置文件时加密密码。 这是我当前的配置 MongoDB连接 模型类:@ Document @ AllArgsConstructor @ NoArgsConstructor @ Data公共类用户{ @Id @Indexed私有字符串Id;@索引私有字符串地址;@索引私有字符串名称;@索引的私有字符串电子邮件;@索引私有字符串密码;@索引私有字符串角色;}

  • 目前,我们正在使用Checkmarx扫描应用程序代码。不确定Checkmarx是否检测/扫描源代码中的任何硬编码密码。是否需要在Checkmarx服务器上添加任何额外的配置来检测密码?