文章目录

  • 修改方法
  • 方法一:不需要手动改数据库
  • 方法二:手动改数据库
  • 为什么密码要加密存储
  • BCryptPasswordEncoder介绍


修改方法

若依等Spring Boot 后台管理框架使用了Spring Security进行身份认证和授权,可以通过以下步骤修改超级管理员密码:

方法一:不需要手动改数据库

  1. 找到对应的用户实体类(通常是UserAdmin),该实体类应该包含用户的用户名和密码字段。
  2. 在该实体类中添加一个方法,用于设置密码。可以命名为setPassword或类似的方法。
  3. 在该方法中,使用BCryptPasswordEncoder对新密码进行加密,并将加密后的密码设置给用户对象的密码字段。
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;

// ...

public void setPassword(String newPassword) {
    BCryptPasswordEncoder encoder = new BCryptPasswordEncoder();
    String encodedPassword = encoder.encode(newPassword);
    this.password = encodedPassword;
}
  1. 在合适的地方调用这个方法,通常是在修改密码的业务逻辑中或管理员用户管理的控制器中。
// 获取要修改密码的超级管理员用户
User adminUser = userRepository.findByUsername("admin");

// 调用设置密码的方法,传入新密码
adminUser.setPassword("newPassword");

// 保存用户对象,更新密码到数据库
userRepository.save(adminUser);
  1. 这里的userRepository是对用户实体类进行数据库操作的Repository对象。

通过以上步骤,你可以使用setPassword方法来修改超级管理员的密码。需要注意的是,使用BCryptPasswordEncoder进行密码加密是Spring Security推荐的安全做法,可以保证密码在存储和验证过程中的安全性。

方法二:手动改数据库

1.随便在哪个地方写个main 方法

import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;

public class Test {
    public static void main(String[] args) {
        BCryptPasswordEncoder encoder = new BCryptPasswordEncoder();
        String result = encoder.encode("admin123");
        System.out.println(result);
        boolean matches = encoder.matches("123", result);
        System.out.println(matches);
    }
}

数据库找到sys_user表,复制System.out.println(result)打印出来的值,将admin的password改掉。

为什么密码要加密存储

用户密码加密的目的是保护用户的密码不被未经授权的人员访问或泄露。以下是密码加密的几个重要原因:

  1. 数据安全:用户密码通常是敏感信息,如果以明文形式存储在数据库或其他存储介质中,一旦这些数据被恶意访问或泄露,攻击者可以轻易获取用户的密码,从而导致安全风险。通过加密密码,即使攻击者获得了存储的密码,也很难还原出原始密码。
  2. 防止密码重复使用:许多用户倾向于在多个网站或应用程序中使用相同的密码。如果密码以明文形式存储,一旦一个网站的密码被泄露,攻击者可以轻松尝试在其他网站或应用程序中使用相同的密码。通过加密密码,即使密码在其他地方泄露,攻击者也无法直接使用该密码。
  3. 降低内部威胁:即使在应用程序的内部,也应限制对用户密码的可见性。通过加密密码,即使是具有访问数据库权限的内部人员,也无法直接查看或使用用户的原始密码。
  4. 合规性要求:许多行业和法规要求对用户密码进行适当的安全保护,以确保数据隐私和安全性。加密密码是满足这些要求的一种方式。

常见的密码加密方法包括哈希函数和加密算法,如BCrypt、SHA-256、PBKDF2等。这些算法将密码转换为不可逆的哈希值或加密文本,以确保密码的保密性和安全性。

BCryptPasswordEncoder介绍

BCryptPasswordEncoder是Spring Security框架中的一个密码编码器,用于对密码进行加密和验证。它使用BCrypt哈希算法,是一种基于salt的密码哈希算法,适用于存储和验证用户密码。

BCryptPasswordEncoder的工作原理如下:

  1. 对于给定的原始密码,BCryptPasswordEncoder首先会生成一个随机的salt(盐),并将其与密码进行组合。
  2. 然后,它使用BCrypt哈希算法对组合后的密码进行加密,生成一个哈希值。
  3. 最后,哈希值和salt都被存储在数据库中,用于后续的密码验证。

在验证密码时,BCryptPasswordEncoder会从数据库中获取存储的哈希值和salt,然后使用相同的BCrypt算法将输入的密码与salt组合后进行哈希运算,最后将生成的哈希值与数据库中的哈希值进行比较。如果两个哈希值相匹配,则密码验证通过。

使用BCryptPasswordEncoder可以提供密码的安全性,因为它具有以下特点:

  1. 盐的随机性:每个密码都会使用一个唯一的随机salt进行哈希,即使两个用户使用相同的密码,最终的哈希值也会不同,提供了一定程度的安全性。
  2. 迭代计算:BCrypt算法会进行多次哈希计算,这使得破解密码更加困难和耗时。
  3. 密码长度限制:BCrypt算法会截断密码的长度,通常限制为72个字符,这样可以防止密码过长时产生的哈希碰撞。

在Spring Security中,BCryptPasswordEncoder是常用的密码编码器之一,可以通过以下方式在应用程序中使用它:

import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;

BCryptPasswordEncoder encoder = new BCryptPasswordEncoder();
String encodedPassword = encoder.encode("password");

// 验证密码
boolean matches = encoder.matches("password", encodedPassword);

通过使用BCryptPasswordEncoder,开发人员可以在应用程序中安全地存储和验证用户密码,提供更高的安全性和防护措施。