@Entity
@Table(name = "users")
public class UserInfo {
/* other code */
@NotBlank(message = "Password is required")
@Size(min = 6, message = "Password should have min 6 characters")
private String password;
/* other code */
}
控制器文件只是调用服务方法。
服务类别:
@Component
public class UserInfoServiceImpl implements UserInfoService {
@Autowired
private UserInfoRepository userInfoRepository;
public UserInfo register(UserRegisterRequest request) {
UserInfo user = new UserInfo();
user.setFirstName(request.getFirstName());
user.setLastName(request.getLastName());
user.setEmail(request.getEmail());
user.setPhone(request.getPhone());
// Password hashing
user.setPassword(new BCryptPasswordEncoder().encode(request.getPassword()));
user.setIsActive(0);
user.setStatus(1);
return userInfoRepository.save(user);
}
}
我想密码是在行中散列后验证的:
user.setPassword(new BCryptPasswordEncoder().encode(request.getPassword()));
如何在散列和保存之前验证此密码?
如有任何帮助,不胜感激。提前谢了。
您可以验证任何Spring bean的输入。为此,您可以使用@validated和@valid注释的组合,如下所示:
@Component
@Validated
public class UserInfoServiceImpl implements UserInfoService {
@Autowired
private UserInfoRepository userInfoRepository;
public UserInfo register(@Valid UserRegisterRequest request) {
UserInfo user = new UserInfo();
user.setFirstName(request.getFirstName());
user.setLastName(request.getLastName());
user.setEmail(request.getEmail());
user.setPhone(request.getPhone());
// Password hashing
user.setPassword(new BCryptPasswordEncoder().encode(request.getPassword()));
user.setIsActive(0);
user.setStatus(1);
return userInfoRepository.save(user);
}
}
如果需要更好的控件,可以通过编程方式验证:
@Component
public class UserInfoServiceImpl implements UserInfoService {
@Autowired
private UserInfoRepository userInfoRepository;
public UserInfo register(UserRegisterRequest request) {
ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
Validator validator = factory.getValidator();
Set<ConstraintViolation<UserRegisterRequest> violations = validator.validate(input);
if (!violations.isEmpty()) {
// Do something on invalid input;
}
UserInfo user = new UserInfo();
user.setFirstName(request.getFirstName());
user.setLastName(request.getLastName());
user.setEmail(request.getEmail());
user.setPhone(request.getPhone());
// Password hashing
user.setPassword(new BCryptPasswordEncoder().encode(request.getPassword()));
user.setIsActive(0);
user.setStatus(1);
return userInfoRepository.save(user);
}
}
或者,可以像这样注入预先配置的验证器实例:
@Autowired
Validator validator;
我的问题来自于如何用blowfish散列长密码(>72个字符) 我正在使用bcrypt(blowfish)对密码进行散列。因此,我从这个问题中发现https://security.stackexchange.com/questions/39849/does-bcrypt-have-a-maximal-password-length 它的字符限制为72。 所以,我开始考虑限制密码的最大长度,但在这些
我模拟存储密码散列,并在登录过程中验证它。 我有一个名为的方法来获取字符串密码,并通过添加盐返回它的哈希值。 我选择一个静态值,在本例中,我选择一个相同的密码值() 但结果是: 为什么这两个值不相同? 我的代码有什么问题?
我已经使用带有JPA的安全性实现了。我的所有RESTendpoint现在都可以验证客户端请求的头。密码的验证由框架完成。现在我需要能够验证一个密码与存储的密码哈希。 在默认配置下,用户密码以散列形式存储,并使用函数。如何检查给定的密码字符串是否与存储的bcrypt哈希值匹配? 来源:https://quarkus.io/guides/security-jpa
我一直在阅读OWASP10,我遇到了存储信息的最佳实践。咸杂碎。在这里,您为每个密码生成一个随机的salt,并对其进行梳理、散列和存储。我的疑问是,如果salt是随机生成的,当用户键入密码时,如何对密码进行身份验证?salt是否与用户名一起保存?如果是这样,这种做法仍然是脆弱的。或者他们是怎么做到的?
问题内容: 我需要对密码进行哈希处理以存储在数据库中。如何用Java做到这一点? 我希望使用纯文本密码,添加随机盐,然后将盐和哈希密码存储在数据库中。 然后,当用户想要登录时,我可以使用其提交的密码,从其帐户信息中添加随机盐,对其进行哈希处理,然后查看其是否等同于其帐户信息所存储的哈希密码。 问题答案: 实际上,你可以使用Java运行时内置的工具来执行此操作。Java 6中的SunJCE支持PBK