我正在開發 Spring MVC 專案。我為注冊表單欄位添加了一些驗證。當我單擊表單中的提交按鈕時,在密碼欄位中獲取驗證例外must match "^\$2[ayb]\$.{56}$"。問題是創建,雖然編碼密碼bCryptPasswordEncoder并且此密碼與模式不匹配。
也許編碼密碼看起來像:
$2a$10$kUm6AxxH3SNSIoUtP6V7WOlVimyTMGjmPm0IF6NrDCycXyKSaPgym.
我參考了這個問題正則運算式來查找bcrypt hash?解決問題但不能作業或我。
下面是代碼:
物體
@Entity
@Table(name = "USER")
public class User {
...
...
...
@Pattern(regexp = "^\\$2[ayb]\\$.{56}$")
private String password;
}
控制器
@RequestMapping(value = "/register", method = RequestMethod.POST)
public String resiterUser(@Valid @ModelAttribute("user") User user,
BindingResult result)
{
if(result.hasErrors())
{
System.out.println(result);
mdl.addAttribute("user", user);
return "signup";
}
// ------ Problem Create Here ------
user.setPassword(bCryptPasswordEncoder.encode(user.getPassword()));
userRepo.save(user);
return "redirect:/";
}
看法
<form th:action="@{/register}" method="post" th:object="${user}">
<div class="form-outline mb-4">
<label class="form-label" for="form3Example4cg">Password</label>
<input type="password"
id="form3Example4cg"
th:classappend="${#fields.hasErrors('password') ? 'is-invalid' : ''}"
class="form-control form-control-lg"
th:value="${user.password}"
name="password" />
<div id="validationServer04Name" class="text-danger" th:each="e: ${#fields.errors('password')}" th:text=${e}>
</div>
</div>
<div class="d-flex justify-content-center">
<button type="submit" class="btn bg-primary btn-block btn-lg text-white">Primary</button>
</div>
</form>
uj5u.com熱心網友回復:
驗證有兩個階段——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()));
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/445630.html
上一篇:帶有Isolation.SERIALIZABLE的SpringTransactional不會鎖定資料庫行以進行更新
