为什么验证不适用于编码密码



在我的项目中,我为注册表单字段添加了一些验证。当点击提交按钮密码验证时,不会像@AAAzzz123那样检查原始密码,而是像$2a$10$kUm6AxxH3SNSIoUtP6V7WOlFTIORTOILKDFGOP那样检查编码密码,并产生验证错误消息。下面是我的密码。

实体

public class User {
...
...
...
@Pattern(regexp = "(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[^\da-zA-Z]).{8,15}$")
private String password;
}

控制器

@RequestMapping(value = "/register", method = RequestMethod.POST)
public String resiterUser(@Valid @ModelAttribute("user") User user, 
BindingResult result)
{

if(result.hasErrors())
{
return "signup";
}
// Problem is here
user.setPassword(bCryptPasswordEncoder.encode(user.getPassword()));
userRepo.save(user);
return "redirect:/";
}

查看

<form th:action="@{/register}" method="post">

<div class="form-outline mb-4">
<label class="form-label" for="form3Example4cg">Password</label>
<input type="password" 
th:classappend="${#fields.hasErrors('password') ? 'is-invalid' : ''}" 
class="form-control form-control-lg"
name="password" />
<div id="validation" class="text-danger" th:each="e: ${#fields.errors('password')}" th:text=${e}>
</div>
</div>

<div class="d-flex">
<button type="submit" class="btn bg-primary">Submit</button>
</div>

</form>
验证有两个阶段-MVC层和JPA层。如果对两个层使用相同的模型类,则不能对两个不同的对象使用相同的字段。

你可以这样分开它们,例如:

@Entity
@Table(name = "USER")
public class User {
@Column(name = "password")
@Pattern(regexp = "^\$2[aby]\$.{56}$")
private String encodedPassword
// for form binding only
private transient String newPassword;
}
user.setEncodedPassword(bCryptPasswordEncoder.encode(user.getNewPassword()));

相关内容

最新更新