Skip to content

Commit bf72c56

Browse files
author
Eugen
committed
Merge pull request eugenp#128 from Doha2012/master
spring security reset password
2 parents 7b531f0 + cfed692 commit bf72c56

File tree

16 files changed

+423
-9
lines changed

16 files changed

+423
-9
lines changed
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package org.baeldung.persistence.dao;
2+
3+
import org.baeldung.persistence.model.PasswordResetToken;
4+
import org.baeldung.persistence.model.User;
5+
import org.springframework.data.jpa.repository.JpaRepository;
6+
7+
public interface PasswordResetTokenRepository extends JpaRepository<PasswordResetToken, Long> {
8+
9+
public PasswordResetToken findByToken(String token);
10+
11+
public PasswordResetToken findByUser(User user);
12+
}
Lines changed: 133 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,133 @@
1+
package org.baeldung.persistence.model;
2+
3+
import java.sql.Timestamp;
4+
import java.util.Calendar;
5+
import java.util.Date;
6+
7+
import javax.persistence.Entity;
8+
import javax.persistence.FetchType;
9+
import javax.persistence.GeneratedValue;
10+
import javax.persistence.GenerationType;
11+
import javax.persistence.Id;
12+
import javax.persistence.JoinColumn;
13+
import javax.persistence.OneToOne;
14+
15+
@Entity
16+
public class PasswordResetToken {
17+
18+
private static final int EXPIRATION = 60 * 24;
19+
20+
@Id
21+
@GeneratedValue(strategy = GenerationType.AUTO)
22+
private Long id;
23+
24+
private String token;
25+
26+
@OneToOne(targetEntity = User.class, fetch = FetchType.EAGER)
27+
@JoinColumn(nullable = false, name = "user_id")
28+
private User user;
29+
30+
private Date expiryDate;
31+
32+
public PasswordResetToken() {
33+
super();
34+
}
35+
36+
public PasswordResetToken(String token) {
37+
super();
38+
39+
this.token = token;
40+
this.expiryDate = calculateExpiryDate(EXPIRATION);
41+
}
42+
43+
public PasswordResetToken(String token, User user) {
44+
super();
45+
46+
this.token = token;
47+
this.user = user;
48+
this.expiryDate = calculateExpiryDate(EXPIRATION);
49+
}
50+
51+
public String getToken() {
52+
return token;
53+
}
54+
55+
public void setToken(String token) {
56+
this.token = token;
57+
}
58+
59+
public User getUser() {
60+
return user;
61+
}
62+
63+
public void setUser(User user) {
64+
this.user = user;
65+
}
66+
67+
public Date getExpiryDate() {
68+
return expiryDate;
69+
}
70+
71+
public void setExpiryDate(Date expiryDate) {
72+
this.expiryDate = expiryDate;
73+
}
74+
75+
private Date calculateExpiryDate(int expiryTimeInMinutes) {
76+
Calendar cal = Calendar.getInstance();
77+
cal.setTime(new Timestamp(cal.getTime().getTime()));
78+
cal.add(Calendar.MINUTE, expiryTimeInMinutes);
79+
return new Date(cal.getTime().getTime());
80+
}
81+
82+
public void updateToken(String token) {
83+
this.token = token;
84+
this.expiryDate = calculateExpiryDate(EXPIRATION);
85+
}
86+
87+
//
88+
89+
@Override
90+
public int hashCode() {
91+
final int prime = 31;
92+
int result = 1;
93+
result = prime * result + ((expiryDate == null) ? 0 : expiryDate.hashCode());
94+
result = prime * result + ((token == null) ? 0 : token.hashCode());
95+
result = prime * result + ((user == null) ? 0 : user.hashCode());
96+
return result;
97+
}
98+
99+
@Override
100+
public boolean equals(Object obj) {
101+
if (this == obj)
102+
return true;
103+
if (obj == null)
104+
return false;
105+
if (getClass() != obj.getClass())
106+
return false;
107+
PasswordResetToken other = (PasswordResetToken) obj;
108+
if (expiryDate == null) {
109+
if (other.expiryDate != null)
110+
return false;
111+
} else if (!expiryDate.equals(other.expiryDate))
112+
return false;
113+
if (token == null) {
114+
if (other.token != null)
115+
return false;
116+
} else if (!token.equals(other.token))
117+
return false;
118+
if (user == null) {
119+
if (other.user != null)
120+
return false;
121+
} else if (!user.equals(other.user))
122+
return false;
123+
return true;
124+
}
125+
126+
@Override
127+
public String toString() {
128+
final StringBuilder builder = new StringBuilder();
129+
builder.append("Token [String=").append(token).append("]").append("[Expires").append(expiryDate).append("]");
130+
return builder.toString();
131+
}
132+
133+
}

spring-security-login-and-registration/src/main/java/org/baeldung/persistence/model/VerificationToken.java

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,8 @@
11
package org.baeldung.persistence.model;
22

33
import java.util.Calendar;
4-
import java.sql.Date;
5-
import java.sql.Timestamp;
4+
import java.util.Date;
65

7-
import javax.persistence.Column;
86
import javax.persistence.Entity;
97
import javax.persistence.FetchType;
108
import javax.persistence.GeneratedValue;
@@ -16,7 +14,7 @@
1614
@Entity
1715
public class VerificationToken {
1816

19-
private static final int EXPIRATION = 60 * 24;
17+
private static final int EXPIRATION = 2;// 60 * 24;
2018

2119
@Id
2220
@GeneratedValue(strategy = GenerationType.AUTO)
@@ -75,11 +73,16 @@ public void setExpiryDate(Date expiryDate) {
7573

7674
private Date calculateExpiryDate(int expiryTimeInMinutes) {
7775
Calendar cal = Calendar.getInstance();
78-
cal.setTime(new Timestamp(cal.getTime().getTime()));
76+
cal.setTimeInMillis(new Date().getTime());
7977
cal.add(Calendar.MINUTE, expiryTimeInMinutes);
8078
return new Date(cal.getTime().getTime());
8179
}
8280

81+
public void updateToken(String token) {
82+
this.token = token;
83+
this.expiryDate = calculateExpiryDate(EXPIRATION);
84+
}
85+
8386
//
8487

8588
@Override

spring-security-login-and-registration/src/main/java/org/baeldung/persistence/service/IUserService.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package org.baeldung.persistence.service;
22

3+
import org.baeldung.persistence.model.PasswordResetToken;
34
import org.baeldung.persistence.model.User;
45
import org.baeldung.persistence.model.VerificationToken;
56
import org.baeldung.validation.EmailExistsException;
@@ -18,4 +19,17 @@ public interface IUserService {
1819

1920
VerificationToken getVerificationToken(String VerificationToken);
2021

22+
VerificationToken updateVerificationToken(String token);
23+
24+
void createPasswordResetTokenForUser(User user, String token);
25+
26+
User findUserByEmail(String email);
27+
28+
PasswordResetToken getPasswordResetToken(String token);
29+
30+
User getUserByPasswordResetToken(String token);
31+
32+
User getUserByID(long id);
33+
34+
void changeUserPassword(User user, String password);
2135
}

spring-security-login-and-registration/src/main/java/org/baeldung/persistence/service/UserService.java

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,15 @@
11
package org.baeldung.persistence.service;
22

33
import java.util.Arrays;
4+
import java.util.UUID;
45

56
import javax.transaction.Transactional;
67

8+
import org.baeldung.persistence.dao.PasswordResetTokenRepository;
79
import org.baeldung.persistence.dao.RoleRepository;
810
import org.baeldung.persistence.dao.UserRepository;
911
import org.baeldung.persistence.dao.VerificationTokenRepository;
12+
import org.baeldung.persistence.model.PasswordResetToken;
1013
import org.baeldung.persistence.model.User;
1114
import org.baeldung.persistence.model.VerificationToken;
1215
import org.baeldung.validation.EmailExistsException;
@@ -23,6 +26,9 @@ public class UserService implements IUserService {
2326
@Autowired
2427
private VerificationTokenRepository tokenRepository;
2528

29+
@Autowired
30+
private PasswordResetTokenRepository passwordTokenRepository;
31+
2632
@Autowired
2733
private PasswordEncoder passwordEncoder;
2834

@@ -74,6 +80,39 @@ public void createVerificationTokenForUser(User user, String token) {
7480
tokenRepository.save(myToken);
7581
}
7682

83+
public VerificationToken updateVerificationToken(String verificationToken) {
84+
VerificationToken vToken = tokenRepository.findByToken(verificationToken);
85+
vToken.updateToken(UUID.randomUUID().toString());
86+
vToken = tokenRepository.save(vToken);
87+
return vToken;
88+
}
89+
90+
public void createPasswordResetTokenForUser(User user, String token) {
91+
PasswordResetToken myToken = new PasswordResetToken(token, user);
92+
passwordTokenRepository.save(myToken);
93+
}
94+
95+
public User findUserByEmail(String email) {
96+
return repository.findByEmail(email);
97+
}
98+
99+
public PasswordResetToken getPasswordResetToken(String token) {
100+
return passwordTokenRepository.findByToken(token);
101+
}
102+
103+
public User getUserByPasswordResetToken(String token) {
104+
return passwordTokenRepository.findByToken(token).getUser();
105+
}
106+
107+
public User getUserByID(long id) {
108+
return repository.findOne(id);
109+
}
110+
111+
public void changeUserPassword(User user, String password) {
112+
user.setPassword(passwordEncoder.encode(password));
113+
repository.save(user);
114+
}
115+
77116
private boolean emailExist(String email) {
78117
User user = repository.findByEmail(email);
79118
if (user != null) {

spring-security-login-and-registration/src/main/java/org/baeldung/registration/listener/RegistrationListener.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ private void confirmRegistration(OnRegistrationCompleteEvent event) {
4141
email.setTo(recipientAddress);
4242
email.setSubject(subject);
4343
email.setText(message + " \r\n" + "http://localhost:8080" + confirmationUrl);
44+
System.out.println(email.getText());
4445
mailSender.send(email);
4546
}
4647
}

spring-security-login-and-registration/src/main/java/org/baeldung/security/MyUserDetailsService.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ public UserDetails loadUserByUsername(final String email) throws UsernameNotFoun
5656

5757
// UTIL
5858

59-
private final Collection<? extends GrantedAuthority> getAuthorities(final Collection<Role> roles) {
59+
public final Collection<? extends GrantedAuthority> getAuthorities(final Collection<Role> roles) {
6060
return getGrantedAuthorities(getPrivileges(roles));
6161
}
6262

spring-security-login-and-registration/src/main/java/org/baeldung/spring/MvcConfig.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,8 @@ public void addViewControllers(final ViewControllerRegistry registry) {
4848
registry.addViewController("/admin.html");
4949
registry.addViewController("/registration.html");
5050
registry.addViewController("/successRegister.html");
51+
registry.addViewController("/forgetPassword.html");
52+
registry.addViewController("/updatePassword.html");
5153
}
5254

5355
@Override

0 commit comments

Comments
 (0)