目前,通过html表单向数据库添加新用户时,密码以我在表单中指定的方式写入数据库,但是是否有可能以某种方式使密码立即以加密形式进入数据库?
在用 spring MVC + security + hibernate + thymeleaf 编写的简单 crud 应用程序中组织这个的最佳方法是什么?
大部分例子都是用xml文件写的(或者我没好好搜索),但目前我不知道如何在javaConfig上搞砸这个东西。
链接到git 存储库
BCryptPasswordEncoder bean 和自动装配使用它
@Bean
public BCryptPasswordEncoder bCryptPasswordEncoder() {
return new BCryptPasswordEncoder(12);
}
@Autowired
protected void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
auth.userDetailsService(userService).passwordEncoder(bCryptPasswordEncoder());
}
添加用户的html表单
<form action="#" th:action="@{addUser}" th:object="${user}" method="post">
<label for="name">Name</label>
<input type="text" th:field="*{name}" id="name" placeholder="Name">
<span th:if="${#fields.hasErrors('name')}" th:errors="*{name}"></span>
<label for="password">Password</label>
<input type="text" th:field="*{password}" id="password" placeholder="Password">
<span th:if="${#fields.hasErrors('password')}" th:errors="*{password}"></span>
<label for="email">Email</label>
<input type="text" th:field="*{email}" id="email" placeholder="Email">
<span th:if="${#fields.hasErrors('email')}" th:errors="*{email}"></span>
<input type="submit" value="Add User">
</form>
添加新用户的控制器
@GetMapping
public ModelAndView showRegistrationForm(User user) {
ModelAndView modelAndView = new ModelAndView("reg");
modelAndView.addObject("user", user);
return modelAndView;
}
@PostMapping("/newUser")
public String createUser(User user) {
user.getRoleSet().add(roleService.getDefaultRole());
userService.addUser(user);
return "redirect:/index";
}
ps addUser 方法调用服务上的 addUser 方法,该方法又使用 JPA (save(user)) 实现