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

带有Spring security的自定义密码盐

钱毅
2023-03-14

我想用bcrypt和Spring security哈希和salt用户密码。

public class User {
  private Integer id;
  private String email;
  private String hashedPassword;
  private String salt; //I want to use this salt.
  private Boolean enabled;

  //Getters & Setters
}

下面是我如何用他们自己的salt创建新用户:

@Transactional
public User create(String email, String password) {
  User user = new User();
  user.setSalt(BCrypt.gensalt(12)); //Generate salt
  user.setEnabled(true);
  user.setEmail(email);
  user.setHashedPassword(BCrypt.hashpw(password, user.getSalt()));
  return dao.persist(user);
}

下面是spring配置:

<beans:bean id="userService"  class="com.mycompany.service.UserService"/>
<beans:bean id="myCustomUserDetailService" class="com.mycompany.service.MyCustomUserDetailService"/>
<beans:bean id="bcryptEncoder" class="org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder"/>

<beans:bean id="saltSource" class="org.springframework.security.authentication.dao.ReflectionSaltSource">
    <beans:property name="userPropertyToUse" value="salt"/>
</beans:bean>

<authentication-manager>
  <authentication-provider user-service-ref="myCustomUserDetailService">
    <password-encoder ref="bcryptEncoder">
      <salt-source ref="saltSource"/>
    </password-encoder>
  </authentication-provider>
</authentication-manager>

在此配置中,我指示PasswordEncoder必须使用user.getSalt()

  1. 有没有办法使用我的saltsource?或
  2. 哪个可靠的算法允许我的saltsource

多谢了。

共有1个答案

栾耀
2023-03-14

第一个问题的答案:

BCryptPasswordEncoder具有硬编码盐源(BCrypt.GetSalt)。
因此不可能强制BCryptPasswordEncoder使用其他盐源。
无论如何,您可以尝试将其子类化,并添加自定义盐属性。

 类似资料:
  • 我正在尝试实现AES自定义密码加密,并希望了解下面的代码。 我不太理解为什么需要指定密钥大小256“pbekeyspec(password,salt,65536,256)”,而我已经使用了“pbkdf2withHMACSHA256”,它应该生成256位的SecretKey。 并且在使用我的密码+salt生成密钥之后,为什么我需要将它与SecretKeySpec作为AES算法关联起来。

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

  • 我尝试开发一个小android应用程序,并显示一个对话框警报,其中只包含一个edittext,以填充自定义内容作为下一个链接 创建自定义布局我有这个代码,但它不工作 } 但是代码循环运行 我不明白 在我班上的主要活动 我有这个密码 这是我的风格。xml 我的logcat是下一个 谢谢你的帮助,

  • 问题内容: 我正在使用.NET的HttpClient向WebAPI发出请求,该WebAPI返回一些JSON数据,该数据需要在客户端进行一些自定义反序列化。为此,我已经完成了自己的工作,但是我不知道如何让该方法处理转换器的存在。 通过使用读取响应,然后将该字符串传递给,我已经解决了我的问题,但是似乎应该有一个更优雅的解决方案。 这是我的代码: 这是我所能做到的最好的,还是有一些更优雅的方法? 如果需

  • 我们正在使用spring和Spring-Security-3.2。最近,我们向RESTAPI添加了注释@preauthorize(以前是基于URL的)。 我们已经有了用-@ControllerAdvice和自定义的PermissionEvaluator注释的全局异常处理程序,除了错误消息之外,其他一切都正常工作。 是否可能抛出一个包含权限名称的异常,所以最终的错误消息应该是“Access Is d

  • 我尝试用自定义控制器制作一个自定义组件。自定义组件已经显示在应用程序上,但我未能向其添加属性。 项目结构: null 布尔马尔科 完全错误: 原因:java.lang.nullPointerException:无法调用“javafx.scene.image.imageeview.setimage(javafx.scene.image.image)”,因为“controller.topbarbtn.