Skip to content

Commit 277ba78

Browse files
author
Eugen
committed
Merge pull request eugenp#101 from egmp777/master
Password Encoding
2 parents 9d8b2c3 + f75becb commit 277ba78

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

51 files changed

+7869
-205
lines changed

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

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

33
import javax.persistence.CascadeType;
4+
//ERASE
5+
import javax.persistence.Column;
46
import javax.persistence.Entity;
57
import javax.persistence.FetchType;
68
import javax.persistence.GeneratedValue;
@@ -36,8 +38,6 @@ public User() {
3638
this.tokenExpired = false;
3739
}
3840

39-
//
40-
4141
public Long getId() {
4242
return id;
4343
}
@@ -102,8 +102,6 @@ public void setTokenExpired(boolean expired) {
102102
this.tokenExpired = expired;
103103
}
104104

105-
//
106-
107105
@Override
108106
public int hashCode() {
109107
final int prime = 31;

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
import java.util.Calendar;
44
import java.sql.Date;
55
import java.sql.Timestamp;
6+
7+
import javax.persistence.Column;
68
import javax.persistence.Entity;
79
import javax.persistence.FetchType;
810
import javax.persistence.GeneratedValue;
@@ -47,7 +49,6 @@ public VerificationToken(String token, User user) {
4749
this.expiryDate = calculateExpiryDate(EXPIRATION);
4850
}
4951

50-
//
5152

5253
public String getToken() {
5354
return token;

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,9 @@
1515
import org.springframework.security.web.RedirectStrategy;
1616
import org.springframework.security.web.WebAttributes;
1717
import org.springframework.security.web.authentication.AuthenticationSuccessHandler;
18+
import org.springframework.stereotype.Component;
1819

20+
@Component("myAuthenticationSuccessHandler")
1921
public class MySimpleUrlAuthenticationSuccessHandler implements AuthenticationSuccessHandler {
2022
private final Logger logger = LoggerFactory.getLogger(getClass());
2123

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
@@ -17,7 +17,7 @@
1717
import org.springframework.stereotype.Service;
1818
import org.springframework.transaction.annotation.Transactional;
1919

20-
@Service
20+
@Service("userDetailsService")
2121
@Transactional
2222
public class MyUserDetailsService implements UserDetailsService {
2323

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,38 @@
11
package org.baeldung.spring;
22

3+
import org.springframework.beans.factory.annotation.Autowired;
4+
import org.springframework.context.annotation.Bean;
5+
import org.springframework.context.annotation.ComponentScan;
36
import org.springframework.context.annotation.Configuration;
47
import org.springframework.context.annotation.ImportResource;
8+
import org.springframework.security.core.userdetails.UserDetailsService;
9+
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
10+
import org.springframework.security.authentication.dao.DaoAuthenticationProvider;
511

612
@Configuration
13+
@ComponentScan(basePackages = { "org.baeldung.security" })
714
@ImportResource({ "classpath:webSecurityConfig.xml" })
815
public class SecSecurityConfig {
916

17+
@Autowired
18+
UserDetailsService userDetailsService;
19+
1020
public SecSecurityConfig() {
1121
super();
1222
}
1323

14-
}
24+
@Bean
25+
public BCryptPasswordEncoder encoder() {
26+
BCryptPasswordEncoder encoder = new BCryptPasswordEncoder(11);
27+
return encoder;
28+
}
29+
30+
@Bean
31+
public DaoAuthenticationProvider authProvider() {
32+
DaoAuthenticationProvider authProvider = new DaoAuthenticationProvider();
33+
authProvider.setUserDetailsService(userDetailsService);
34+
authProvider.setPasswordEncoder(encoder());
35+
return authProvider;
36+
}
37+
38+
}

spring-security-login-and-registration/src/main/resources/webSecurityConfig.xml

Lines changed: 1 addition & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
<intercept-url pattern="/emailError*" access="permitAll" />
2020
<intercept-url pattern="/resources/**" access="permitAll" />
2121
<intercept-url pattern="/invalidSession*" access="isAnonymous()" />
22-
<intercept-url pattern="/**" access="isAuthenticated()" />
22+
<intercept-url pattern="/**" access="isAuthenticated()" />
2323
<form-login login-page='/login.html'
2424
authentication-failure-url="/login.html?error=true"
2525
authentication-success-handler-ref="myAuthenticationSuccessHandler"
@@ -29,18 +29,7 @@
2929
<logout invalidate-session="false" logout-success-url="/logout.html?logSucc=true"
3030
logout-url="/j_spring_security_logout" delete-cookies="JSESSIONID" />
3131
</http>
32-
33-
<beans:bean id="myAuthenticationSuccessHandler"
34-
class="org.baeldung.security.MySimpleUrlAuthenticationSuccessHandler" />
3532
<authentication-manager>
3633
<authentication-provider ref="authProvider"/>
3734
</authentication-manager>
38-
<beans:bean id="authProvider" class="org.springframework.security.authentication.dao.DaoAuthenticationProvider">
39-
<beans:property name="userDetailsService" ref="userDetailsService" /> <beans:property
40-
name="passwordEncoder" ref="encoder" /> </beans:bean>
41-
<beans:bean id="userDetailsService" class="org.baeldung.security.MyUserDetailsService" />
42-
<beans:bean id="encoder"
43-
class="org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder">
44-
<beans:constructor-arg name="strength" value="11" />
45-
</beans:bean>
4635
</beans:beans>
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
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+
}
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
package org.baeldung.event.listener;
2+
3+
import java.util.UUID;
4+
5+
import org.baeldung.event.OnRegistrationCompleteEvent;
6+
import org.baeldung.persistence.model.User;
7+
import org.baeldung.persistence.service.IUserService;
8+
import org.springframework.beans.factory.annotation.Autowired;
9+
import org.springframework.context.ApplicationListener;
10+
import org.springframework.context.MessageSource;
11+
import org.springframework.mail.SimpleMailMessage;
12+
import org.springframework.mail.javamail.JavaMailSender;
13+
import org.springframework.stereotype.Component;
14+
15+
@Component
16+
public class RegistrationListener implements ApplicationListener<OnRegistrationCompleteEvent> {
17+
@Autowired
18+
private IUserService service;
19+
20+
@Autowired
21+
private MessageSource messages;
22+
23+
@Autowired
24+
private JavaMailSender mailSender;
25+
26+
@Override
27+
public void onApplicationEvent(OnRegistrationCompleteEvent event) {
28+
this.confirmRegistration(event);
29+
}
30+
31+
private void confirmRegistration(OnRegistrationCompleteEvent event) {
32+
User user = event.getUser();
33+
String token = UUID.randomUUID().toString();
34+
service.createVerificationTokenForUser(user, token);
35+
36+
String recipientAddress = user.getEmail();
37+
String subject = "Registration Confirmation";
38+
String confirmationUrl = event.getAppUrl() + "/regitrationConfirm.html?token=" + token;
39+
String message = messages.getMessage("message.regSucc", null, event.getLocale());
40+
SimpleMailMessage email = new SimpleMailMessage();
41+
email.setTo(recipientAddress);
42+
email.setSubject(subject);
43+
email.setText(message + " \r\n" + "http://localhost:8080" + confirmationUrl);
44+
mailSender.send(email);
45+
}
46+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package org.baeldung.hashing;
2+
3+
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
4+
5+
public class HashGenerator {
6+
7+
public String getHashedPassword(String password) {
8+
BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
9+
String hashedPassword = passwordEncoder.encode(password);
10+
return hashedPassword;
11+
}
12+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package org.baeldung.persistence.dao;
2+
3+
import org.springframework.data.jpa.repository.JpaRepository;
4+
import org.baeldung.persistence.model.User;
5+
6+
public interface UserRepository extends JpaRepository<User, Long> {
7+
public User findByEmail(String email);
8+
9+
public void delete(User user);
10+
11+
}

0 commit comments

Comments
 (0)