Skip to content

Commit 56beb17

Browse files
committed
Email Confirmation Article
All Changes as of Video Nov 22
1 parent 65d7986 commit 56beb17

22 files changed

+440
-498
lines changed

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

Lines changed: 0 additions & 19 deletions
This file was deleted.
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package org.baeldung.event;
2+
3+
import java.util.Locale;
4+
5+
import org.baeldung.persistence.model.User;
6+
import org.springframework.context.ApplicationEvent;
7+
8+
@SuppressWarnings("serial")
9+
public class OnRegistrationCompleteEvent extends ApplicationEvent {
10+
11+
private final String appUrl;
12+
private final Locale locale;
13+
private final User user;
14+
15+
public OnRegistrationCompleteEvent(User user, Locale locale, String appUrl) {
16+
super(user);
17+
this.user = user;
18+
this.locale = locale;
19+
this.appUrl = appUrl;
20+
}
21+
22+
public String getAppUrl() {
23+
return appUrl;
24+
}
25+
26+
public Locale getLocale() {
27+
return locale;
28+
}
29+
30+
public User getUser() {
31+
return user;
32+
}
33+
34+
}

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

Lines changed: 0 additions & 57 deletions
This file was deleted.
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
package org.baeldung.event.listener;
2+
3+
import java.util.UUID;
4+
import org.baeldung.event.OnRegistrationCompleteEvent;
5+
import org.baeldung.persistence.model.User;
6+
import org.baeldung.persistence.service.IUserService;
7+
import org.springframework.beans.factory.annotation.Autowired;
8+
import org.springframework.context.ApplicationListener;
9+
import org.springframework.context.MessageSource;
10+
import org.springframework.mail.SimpleMailMessage;
11+
import org.springframework.mail.javamail.JavaMailSender;
12+
import org.springframework.stereotype.Component;
13+
14+
@Component
15+
public class RegistrationListener implements ApplicationListener<OnRegistrationCompleteEvent> {
16+
@Autowired
17+
private IUserService service;
18+
19+
@Autowired
20+
private MessageSource messages;
21+
22+
@Autowired
23+
private JavaMailSender mailSender;
24+
25+
@Override
26+
public void onApplicationEvent(OnRegistrationCompleteEvent event) {
27+
this.confirmRegistration(event);
28+
}
29+
30+
private void confirmRegistration(OnRegistrationCompleteEvent event) {
31+
User user = event.getUser();
32+
String token = UUID.randomUUID().toString();
33+
service.addVerificationToken(user, token);
34+
String recipientAddress = user.getEmail();
35+
String subject = "Registration Confirmation";
36+
String confirmationUrl = event.getAppUrl() + "/regitrationConfirm.html?token=" + token;
37+
String message = messages.getMessage("message.regSucc", null, event.getLocale());
38+
SimpleMailMessage email = new SimpleMailMessage();
39+
email.setTo(recipientAddress);
40+
email.setSubject(subject);
41+
email.setText(message + " \r\n" + "http://localhost:8080" + confirmationUrl);
42+
mailSender.send(email);
43+
}
44+
}

spring-security-login-and-registration/src/main/java/org/baeldung/event/service/RegistrationService.java

Lines changed: 0 additions & 50 deletions
This file was deleted.

spring-security-login-and-registration/src/main/java/org/baeldung/persistence/dao/UserRepository.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,8 @@
44
import org.baeldung.persistence.model.User;
55

66
public interface UserRepository extends JpaRepository<User, Long> {
7-
public User findByEmail(String email);
7+
public User findByEmail(String email);
8+
9+
public void delete(User user);
810

9-
public void delete(User user);
1011
}
Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,12 @@
11
package org.baeldung.persistence.dao;
22

3+
import org.baeldung.persistence.model.User;
34
import org.baeldung.persistence.model.VerificationToken;
45
import org.springframework.data.jpa.repository.JpaRepository;
56

67
public interface VerificationTokenRepository extends JpaRepository<VerificationToken, Long> {
78

8-
public VerificationToken findByToken(String token);
9+
public VerificationToken findByToken(String token);
10+
11+
public VerificationToken findByUser(User user);
912
}

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

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,8 @@
1111
import javax.persistence.OneToOne;
1212
import javax.persistence.Table;
1313

14-
@Entity(name = "role")
15-
@Table(name = "role")
14+
@Entity
15+
@Table
1616
public class Role {
1717

1818
@Id
@@ -28,7 +28,6 @@ public class Role {
2828

2929
public Role() {
3030
super();
31-
3231
}
3332

3433
public Role(Integer role) {

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

Lines changed: 27 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -14,33 +14,27 @@
1414
@Table
1515
public class User {
1616

17-
@Id
18-
@GeneratedValue(strategy = GenerationType.AUTO)
19-
private Long id;
20-
@Column(name = "firstName")
21-
private String firstName;
22-
@Column(name="lastName")
17+
@Id
18+
@GeneratedValue(strategy = GenerationType.AUTO)
19+
private Long id;
20+
21+
@Column(name = "firstName")
22+
private String firstName;
23+
24+
@Column(name = "lastName")
2325
private String lastName;
24-
@Column(name="email")
26+
27+
@Column(name = "email")
2528
private String email;
26-
@Column(name="password")
29+
30+
@Column(name = "password")
2731
private String password;
28-
29-
@OneToOne(mappedBy="user",
30-
fetch = FetchType.EAGER,
31-
cascade= CascadeType.ALL)
32-
private VerificationToken verificationToken;
33-
34-
@OneToOne(mappedBy = "user",fetch = FetchType.EAGER, cascade = CascadeType.ALL)
35-
private Role role;
36-
37-
public VerificationToken getVerificationToken() {
38-
return verificationToken;
39-
}
32+
33+
@Column(name = "enabled")
34+
private boolean enabled;
4035

41-
public void setVerificationToken(VerificationToken verificationToken) {
42-
this.verificationToken = verificationToken;
43-
}
36+
@OneToOne(mappedBy = "user", fetch = FetchType.EAGER, cascade = CascadeType.ALL)
37+
private Role role;
4438

4539
public Long getId() {
4640
return id;
@@ -90,6 +84,14 @@ public void setRole(Role role) {
9084
this.role = role;
9185
}
9286

87+
public boolean isEnabled() {
88+
return enabled;
89+
}
90+
91+
public void setEnabled(boolean enabled) {
92+
this.enabled = enabled;
93+
}
94+
9395
@Override
9496
public int hashCode() {
9597
final int prime = 31;
@@ -111,11 +113,11 @@ public boolean equals(final Object obj) {
111113
return false;
112114
return true;
113115
}
116+
114117
@Override
115118
public String toString() {
116119
final StringBuilder builder = new StringBuilder();
117-
builder.append("User [firstName=").append(firstName).append("]").
118-
append("[lastName=").append(lastName).append("]").append("[username").append(email).append("]");
120+
builder.append("User [firstName=").append(firstName).append("]").append("[lastName=").append(lastName).append("]").append("[username").append(email).append("]");
119121
return builder.toString();
120122
}
121123
}

0 commit comments

Comments
 (0)