java - 无法在数据库中使用 BCryptPassword 保存加密密码

我正在尝试使用 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 版本)

node.js - 跟踪 Node.js 程序执行

python - Colab - python 代码中的 input() 框太长,所以我需要回滚才能

python - 从数据框创建字典,其中多列的元组作为键,另一列作为值

c++ - leveldb 是否每 4KB 或 2KB 数据 block 生成 Bloom Filt

python - Python中不同数据类型的大小