我正在尝试使用 BCrypt 在 postgreSQL 数据库中保存加密密码,但出现错误。我在 stackoverflow 上看到了其他答案 我尝试使用这些提示,但我有同样的错误:This application has no explicit mapping for/error, so you are seeing this as a fallback.
2020 年 8 月 25 日星期二 19:37:41 东部夏令时 出现意外错误(类型=内部服务器错误,状态=500)。 无法提交 JPA 事务;嵌套异常是 javax.persistence.RollbackException: Error while committing the transaction org.springframework.transaction.TransactionSystemException:无法提交 JPA 事务;嵌套异常是 javax.persistence.RollbackException: Error while committing the transaction com.sun.proxy.$Proxy76.save(未知来源) .... 在 com.car.carDealer.service.UserService.saveUser(UserService.java:38) 在 com.car.carDealer.controller.Register.register(Register.java:46)
我的代码是:
> > @Configuration
public class WebConfig implements WebMvcConfigurer {
> @Bean
> public BCryptPasswordEncoder passwordEncoder() {
> return new BCryptPasswordEncoder();
> }
}
public interface UserRepository extends CrudRepository<User,Integer> {
User findByEmail(String email);
User findByEmailAndPassword(String email,String password);
}
@Service
public class UserService {
@Autowired
private final UserRepository userRep;
@Autowired
BCryptPasswordEncoder bCryptPasswordEncoder;
@Autowired
BCryptPasswordEncoder bCryptEncoder;
@Autowired
public UserService(UserRepository userRep) {
this.userRep = userRep;
}
public User findByEmailAndPassword(String email, String password) {
return userRep.findByEmailAndPassword(email, password);
}
public User findByEmail(String email) {
return userRep.findByEmail(email);
}
public void saveUser(User user) {
userRep.save(user);
}
@RequestMapping(value = "/register", method = RequestMethod.POST)
public String register(
@Valid User user, BindingResult result, Model model) {
@PostMapping("/register")
public String register(@Valid User user, BindingResult result, Model model) {
if (result.hasErrors()) {
return "user/register";
} else {
User valid = userService.findByEmail(user.getEmail());
if (valid == null) {
user.setPassword(bCryptEncoder.encode(user.getPassword()));
userService.saveUser(user);
String msg = " succes!";
model.addAttribute("msg", msg);
return "user/register";
} else {
String msg = "Please choose another email !";
model.addAttribute("msg", msg);
最佳答案
我试过了。一旦我删除验证,它就会加密密码并将其存储在数据库中。但是当我进行如下验证时:密码必须为 8 到 15 个字符,即使我满足了这个条件,但它不会将其存储在数据中并给出此错误
无法提交 JPA 事务;嵌套的异常是 javax.persistence.RollbackException: Error while committing the transaction
https://stackoverflow.com/questions/63583559/
相关文章:
javascript - 使用javascript强制刷新rss feed
python-3.x - Python3 Beautifulsoup4 从多个容器兄弟中提取文本
javascript - 在 quill-image-resize-vue 中对齐时出错
ios - 我可以声明应用范围内的首字母缩写词替代画外音吗?
c# - Visual Studio 2019 更新中断发布(不正确的 TLS 版本)
python - Colab - python 代码中的 input() 框太长,所以我需要回滚才能
python - 从数据框创建字典,其中多列的元组作为键,另一列作为值