From 73f248ffddfb7e101e99a1e1b27d182c894fe52b Mon Sep 17 00:00:00 2001 From: Holger Steinhauer Date: Sun, 25 Feb 2018 10:39:01 +0000 Subject: [PATCH] BAEL-1489: Applying suggested changes and updating to 2.0.0.RC2 --- spring-5-security/pom.xml | 2 +- .../BaeldungPasswordEncoderSetup.java | 22 ++++------- .../PasswordStorageWebSecurityConfigurer.java | 37 +++++++++---------- 3 files changed, 27 insertions(+), 34 deletions(-) diff --git a/spring-5-security/pom.xml b/spring-5-security/pom.xml index 0a1d1f5df0..ffe6865704 100644 --- a/spring-5-security/pom.xml +++ b/spring-5-security/pom.xml @@ -12,7 +12,7 @@ org.springframework.boot spring-boot-starter-parent - 2.0.0.M7 + 2.0.0.RC2 diff --git a/spring-5-security/src/main/java/com/baeldung/passwordstorage/BaeldungPasswordEncoderSetup.java b/spring-5-security/src/main/java/com/baeldung/passwordstorage/BaeldungPasswordEncoderSetup.java index 94edf85631..94987029db 100644 --- a/spring-5-security/src/main/java/com/baeldung/passwordstorage/BaeldungPasswordEncoderSetup.java +++ b/spring-5-security/src/main/java/com/baeldung/passwordstorage/BaeldungPasswordEncoderSetup.java @@ -2,12 +2,9 @@ package com.baeldung.passwordstorage; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.springframework.context.ApplicationEventPublisher; import org.springframework.context.ApplicationListener; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; -import org.springframework.security.authentication.AuthenticationEventPublisher; -import org.springframework.security.authentication.DefaultAuthenticationEventPublisher; import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; import org.springframework.security.authentication.event.AuthenticationSuccessEvent; import org.springframework.security.core.Authentication; @@ -18,23 +15,20 @@ public class BaeldungPasswordEncoderSetup { private final static Logger LOG = LoggerFactory.getLogger(BaeldungPasswordEncoderSetup.class); - @Bean - public AuthenticationEventPublisher authenticationEventPublisher(final ApplicationEventPublisher publisher) { - return new DefaultAuthenticationEventPublisher(publisher); - } - @Bean public ApplicationListener authenticationSuccessListener(final PasswordEncoder encoder) { + return (AuthenticationSuccessEvent event) -> { - final Authentication authentication = event.getAuthentication(); + final Authentication auth = event.getAuthentication(); - if (authentication instanceof UsernamePasswordAuthenticationToken && authentication.getCredentials() != null) { - final CharSequence clearTextPassword = (CharSequence) authentication.getCredentials(); // 1 - final String newPasswordHash = encoder.encode(clearTextPassword); // 2 + if (auth instanceof UsernamePasswordAuthenticationToken && auth.getCredentials() != null) { - LOG.info("New password hash {} for user {}", newPasswordHash, authentication.getName()); + final CharSequence clearTextPass = (CharSequence) auth.getCredentials(); // 1 + final String newPasswordHash = encoder.encode(clearTextPass); // 2 - ((UsernamePasswordAuthenticationToken) authentication).eraseCredentials(); // 3 + LOG.info("New password hash {} for user {}", newPasswordHash, auth.getName()); + + ((UsernamePasswordAuthenticationToken) auth).eraseCredentials(); // 3 } }; } diff --git a/spring-5-security/src/main/java/com/baeldung/passwordstorage/PasswordStorageWebSecurityConfigurer.java b/spring-5-security/src/main/java/com/baeldung/passwordstorage/PasswordStorageWebSecurityConfigurer.java index 0773de4bd6..22ef2f0835 100644 --- a/spring-5-security/src/main/java/com/baeldung/passwordstorage/PasswordStorageWebSecurityConfigurer.java +++ b/spring-5-security/src/main/java/com/baeldung/passwordstorage/PasswordStorageWebSecurityConfigurer.java @@ -1,54 +1,53 @@ package com.baeldung.passwordstorage; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; -import org.springframework.security.authentication.AuthenticationEventPublisher; import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; +import org.springframework.security.core.userdetails.User; import org.springframework.security.core.userdetails.UserDetailsService; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.security.crypto.password.DelegatingPasswordEncoder; -import org.springframework.security.crypto.password.MessageDigestPasswordEncoder; +import org.springframework.security.crypto.password.NoOpPasswordEncoder; import org.springframework.security.crypto.password.PasswordEncoder; +import org.springframework.security.crypto.password.StandardPasswordEncoder; import org.springframework.security.crypto.scrypt.SCryptPasswordEncoder; +import org.springframework.security.provisioning.InMemoryUserDetailsManager; +import java.util.Collections; import java.util.HashMap; import java.util.Map; @Configuration public class PasswordStorageWebSecurityConfigurer extends WebSecurityConfigurerAdapter { - private final AuthenticationEventPublisher eventPublisher; - private final UserDetailsService userDetailsService; - - @Autowired - public PasswordStorageWebSecurityConfigurer(AuthenticationEventPublisher eventPublisher, UserDetailsService userDetailsService) { - this.eventPublisher = eventPublisher; - this.userDetailsService = userDetailsService; - } @Override protected void configure(AuthenticationManagerBuilder auth) throws Exception { auth.eraseCredentials(false) // 4 - .authenticationEventPublisher(eventPublisher) - .userDetailsService(userDetailsService) + .userDetailsService(getUserDefaultDetailsService()) .passwordEncoder(passwordEncoder()); } + @Bean + public UserDetailsService getUserDefaultDetailsService() { + User testUser = new User("baeldung", "{noop}SpringSecurity5", Collections.emptyList()); + return new InMemoryUserDetailsManager(testUser); + } + @Bean public PasswordEncoder passwordEncoder() { // set up the list of supported encoders and their prefixes - String encodingId = "bcrypt"; + PasswordEncoder defaultEncoder = new StandardPasswordEncoder(); Map encoders = new HashMap<>(); - encoders.put(encodingId, new BCryptPasswordEncoder()); + encoders.put("bcrypt", new BCryptPasswordEncoder()); encoders.put("scrypt", new SCryptPasswordEncoder()); - encoders.put("SHA-256", new MessageDigestPasswordEncoder("SHA-256")); + encoders.put("noop", NoOpPasswordEncoder.getInstance()); - DelegatingPasswordEncoder delegatingPasswordEncoder = new DelegatingPasswordEncoder(encodingId, encoders); - delegatingPasswordEncoder.setDefaultPasswordEncoderForMatches(encoders.get(encodingId)); + DelegatingPasswordEncoder passwordEncoder = new DelegatingPasswordEncoder("bcrypt", encoders); + passwordEncoder.setDefaultPasswordEncoderForMatches(defaultEncoder); - return delegatingPasswordEncoder; + return passwordEncoder; } }