gpt4 book ai didi

java - 如何在数据库中存储哈希密码?

转载 作者:行者123 更新时间:2023-11-30 05:24:33 25 4
gpt4 key购买 nike

这是我的注册 Controller 和用户服务。为什么我无法将密码存储在数据库中?

当我使用 Postman 时,它返回哈希密码的值,但是当我检查数据库时,它只存储“电子邮件”并且密码为空。为什么?我应该创建另一个表密码来存储它们吗?

package demo2.demo.Controller;

import demo2.demo.data.model.User;
import demo2.demo.data.service.UserService;
import demo2.demo.model.dto.UserDTO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;


@RestController
public class LoginController {

@Autowired
private UserService userService;
@Autowired
private PasswordEncoder passwordEncoder;

@PostMapping(path = "/register")
public User registerNewUser(@RequestBody UserDTO userDTO) {
User user = new User();
user.setEmail(userDTO.getEmail());
user.setPassword(userDTO.getPassword());
userService.register(user);
return user;
}
}
package demo2.demo.data.service;

import demo2.demo.constant.RoleConstant;
import demo2.demo.data.model.User;
import demo2.demo.data.model.UserRole;
import demo2.demo.data.repository.UserRepository;
import demo2.demo.data.repository.UserRoleRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Service;

@Service
public class UserService {

@Autowired
private UserRepository userRepository;
@Autowired
private UserRoleRepository userRoleRepository;

@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}

// find by email
public User findByEmail(String email) {
return (User) userRepository.findUserByEmail(email);
}
// find by id
public User findByID(int id) { return userRepository.findById(id).orElse(null);}

// register
public void register(User user) {
try {
// hash password
user.setPassword(passwordEncoder().encode(user.getPassword()));
// save user
userRepository.save(user);
// tạo quyền role
UserRole userRole = new UserRole();
userRole.setRoleID(RoleConstant.roleUser);
userRole.setUserID(user.getId());
userRoleRepository.save(userRole);
}catch (Exception e) {
e.getMessage();
}
}
}

这是我的 user_role 类

@Entity(name = "dbo_user_role")
public class UserRole {
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "user_role_id")
@Id
private int id;
@Column(name = "role_id")
private int roleID;
@Column(name = "user_id")
private int userID;
// getter&setter

这是角色类别

@Entity(name = "dbo_role")
public class Role {
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "role_id")
@Id
private int id;
private String name;

@ManyToMany(fetch = FetchType.LAZY,
cascade = {
CascadeType.MERGE,
CascadeType.PERSIST
})
@JoinTable(name = "dbo_user_role",
joinColumns = {@JoinColumn(name = "role_id")},
inverseJoinColumns = {@JoinColumn(name = "user_id")})
// getter&setter

这是角色类别

@Entity(name = "dbo_user")
public class User {
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "user_id")
@Id
private int id;
private String email;
@Transient
private String password;

最佳答案

@Transient 避免了密码字段的持久性。

来自https://docs.jboss.org/hibernate/jpa/2.1/api/javax/persistence/Transient.html

Specifies that the property or field is not persistent.

为了存储字段的内容,请删除@Transient注释。

关于java - 如何在数据库中存储哈希密码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58928874/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com