मैं वसंत सीखने की कोशिश कर रहा हूं।वसंत बूट डेटा आराम जेपीए - इकाई कस्टम निर्माण (उपयोगकर्ता)
- स्प्रिंग डाटा जेपीए
- स्प्रिंग डाटा बाकी
- स्प्रिंग HATEOAS
- स्प्रिंग सुरक्षा
मैं एक User
बनाने के लिए कोशिश कर रहा हूँ: मैं निम्नलिखित उपकरण का उपयोग कर स्प्रिंग बूट के साथ एक परियोजना बनाई इकाई। मैं चाहता हूं कि उपयोगकर्ता को एन्क्रिप्टेड पासवर्ड (+ नमक) हो।
जब मैं POST
/api/users
पर सफलतापूर्वक एक नया उपयोगकर्ता बना देता हूं।
{
"firstname":"John",
"lastname":"Doe",
"email":"[email protected]",
"password":"12345678"
}
लेकिन मैं 2 समस्या है:
- पासवर्ड स्पष्ट पाठ में सहेजा गया है
- नमक रिक्त है
समस्या मैं+----+---------------------+-----------+----------+----------+------+ | id | email | firstname | lastname | password | salt | +----+---------------------+-----------+----------+----------+------+ | 1 | [email protected] | John | Doe | 12345678 | NULL | +----+---------------------+-----------+----------+----------+------+
सोचो कि डिफ़ॉल्ट कन्स्ट्रक्टर का उपयोग किया जाता है और दूसरा नहीं जिसे मैंने बनाया है। मैं वसंत और जेपीए के लिए नया हूं इसलिए मुझे कुछ याद आना चाहिए। मेरा कोड यहाँ है।
User.java
@Entity
@Table(name = "users")
public class User{
@Id
@GeneratedValue
private Long id;
@Column(nullable = false)
public String firstname;
@Column(nullable = false)
public String lastname;
@Column(nullable = false, unique = true)
public String email;
@JsonIgnore
@Column(nullable = false)
public String password;
@JsonIgnore
@Column
private String salt;
public User() {}
public User(String email, String firstname, String lastname, String password) {
this.email = email;
this.firstname = firstname;
this.lastname = lastname;
this.salt = UUID.randomUUID().toString();
this.password = new BCryptPasswordEncoder().encode(password + this.salt);
}
@JsonIgnore
public String getSalt() {
return salt;
}
@JsonProperty
public void setSalt(String salt) {
this.salt = salt;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getFirstname() {
return firstname;
}
public void setFirstname(String firstname) {
this.firstname = firstname;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getLastname() {
return lastname;
}
public void setLastname(String lastname) {
this.lastname = lastname;
}
@JsonIgnore
public String getPassword() {
return password;
}
@JsonProperty
public void setPassword(String password) {
this.password = password;
}
}
UserRepository.java
public interface UserRepository extends JpaRepository<User, Long> {
public User findByEmail(String email);
public User findByEmailAndPassword(String email, String password);
}
Application.java
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application .class, args);
}
}
इसके अलावा, अगर रों
ओमेन ने पाया कि मैंने क्या गलत किया है, मैं मुझे इंगित करना चाहता हूं कि मुझे उपयोगकर्ता लॉगिन कोड (डिक्रिप्शन) कहां रखना चाहिए।
धन्यवाद।
आपका आरईएसटी @ रीस्ट कंट्रोलर कहां है? – Makoton
@Makoton मेरे पास एक नहीं है। स्प्रिंग डेटा रेस्ट स्वचालित रूप से एक वास्तविक API में मेरी इकाइयों को उजागर करता है। क्या मुझे इस मामले में एक की जरूरत है? –
और आपने उपयोगकर्ता सेवा बनाने का प्रयास किया और: सार्वजनिक शून्य रजिस्टर उपयोगकर्ता (अंतिम उपयोगकर्ता उपयोगकर्ता) { अंतिम स्ट्रिंग एन्कोडेड पासवर्ड = पासवर्डइन्कोडर.नकोड (user.getPassword()); user.setPassword (एन्कोडेड पासवर्ड); userRepo.save (उपयोगकर्ता); } – Makoton