diff --git a/spring-security-modules/spring-5-security/README.md b/spring-security-modules/spring-5-security/README.md
index bad99c22d4..dac2d0f6b8 100644
--- a/spring-security-modules/spring-5-security/README.md
+++ b/spring-security-modules/spring-5-security/README.md
@@ -4,7 +4,6 @@ This module contains articles about Spring Security 5
## Relevant articles:
-- [Extra Login Fields with Spring Security](https://www.baeldung.com/spring-security-extra-login-fields)
- [A Custom Spring SecurityConfigurer](https://www.baeldung.com/spring-security-custom-configurer)
- [New Password Storage In Spring Security 5](https://www.baeldung.com/spring-security-5-password-storage)
- [Default Password Encoder in Spring Security 5](https://www.baeldung.com/spring-security-5-default-password-encoder)
diff --git a/spring-security-modules/spring-security-web-login/README.md b/spring-security-modules/spring-security-web-login/README.md
index 8b9c1583f6..bbef468944 100644
--- a/spring-security-modules/spring-security-web-login/README.md
+++ b/spring-security-modules/spring-security-web-login/README.md
@@ -12,6 +12,7 @@ The "Learn Spring Security" Classes: http://github.learnspringsecurity.com
- [Spring Security – Customize the 403 Forbidden/Access Denied Page](https://www.baeldung.com/spring-security-custom-access-denied-page)
- [Spring Security – Redirect to the Previous URL After Login](https://www.baeldung.com/spring-security-redirect-login)
- [Spring Security Custom AuthenticationFailureHandler](https://www.baeldung.com/spring-security-custom-authentication-failure-handler)
+- [Extra Login Fields with Spring Security](https://www.baeldung.com/spring-security-extra-login-fields)
### Build the Project
```
diff --git a/spring-security-modules/spring-security-web-login/pom.xml b/spring-security-modules/spring-security-web-login/pom.xml
index 3d9947c519..346338cbcd 100644
--- a/spring-security-modules/spring-security-web-login/pom.xml
+++ b/spring-security-modules/spring-security-web-login/pom.xml
@@ -16,6 +16,26 @@
+
+ org.springframework.boot
+ spring-boot-starter-web
+ ${spring-boot.version}
+
+
+ org.springframework.boot
+ spring-boot-starter-security
+ ${spring-boot.version}
+
+
+ org.springframework.boot
+ spring-boot-starter-thymeleaf
+ ${spring-boot.version}
+
+
+ org.thymeleaf.extras
+ thymeleaf-extras-springsecurity5
+ ${thymeleaf-extras-springsecurity5.version}
+
org.springframework.security
@@ -98,6 +118,12 @@
runtime
+
+ org.springframework.boot
+ spring-boot-starter-test
+ ${spring-boot.version}
+ test
+
org.springframework
spring-test
@@ -110,6 +136,11 @@
${spring-security.version}
test
+
+ org.apache.commons
+ commons-lang3
+ ${commons-lang3.version}
+
@@ -153,6 +184,9 @@
1.9.9
+ 2.6.4
+ 3.0.4.RELEASE
+ 3.11
\ No newline at end of file
diff --git a/spring-security-modules/spring-5-security/src/main/java/com/baeldung/loginextrafieldscustom/CustomAuthenticationFilter.java b/spring-security-modules/spring-security-web-login/src/main/java/com/baeldung/loginextrafieldscustom/CustomAuthenticationFilter.java
similarity index 97%
rename from spring-security-modules/spring-5-security/src/main/java/com/baeldung/loginextrafieldscustom/CustomAuthenticationFilter.java
rename to spring-security-modules/spring-security-web-login/src/main/java/com/baeldung/loginextrafieldscustom/CustomAuthenticationFilter.java
index 2a5c5f0368..9e7ecdb2cc 100644
--- a/spring-security-modules/spring-5-security/src/main/java/com/baeldung/loginextrafieldscustom/CustomAuthenticationFilter.java
+++ b/spring-security-modules/spring-security-web-login/src/main/java/com/baeldung/loginextrafieldscustom/CustomAuthenticationFilter.java
@@ -1,50 +1,50 @@
-package com.baeldung.loginextrafieldscustom;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.springframework.security.authentication.AuthenticationServiceException;
-import org.springframework.security.core.Authentication;
-import org.springframework.security.core.AuthenticationException;
-import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;
-
-public class CustomAuthenticationFilter extends UsernamePasswordAuthenticationFilter {
-
- public static final String SPRING_SECURITY_FORM_DOMAIN_KEY = "domain";
-
- @Override
- public Authentication attemptAuthentication(HttpServletRequest request, HttpServletResponse response)
- throws AuthenticationException {
-
- if (!request.getMethod().equals("POST")) {
- throw new AuthenticationServiceException("Authentication method not supported: "
- + request.getMethod());
- }
-
- CustomAuthenticationToken authRequest = getAuthRequest(request);
- setDetails(request, authRequest);
- return this.getAuthenticationManager().authenticate(authRequest);
- }
-
- private CustomAuthenticationToken getAuthRequest(HttpServletRequest request) {
- String username = obtainUsername(request);
- String password = obtainPassword(request);
- String domain = obtainDomain(request);
-
- if (username == null) {
- username = "";
- }
- if (password == null) {
- password = "";
- }
- if (domain == null) {
- domain = "";
- }
-
- return new CustomAuthenticationToken(username, password, domain);
- }
-
- private String obtainDomain(HttpServletRequest request) {
- return request.getParameter(SPRING_SECURITY_FORM_DOMAIN_KEY);
- }
-}
+package com.baeldung.loginextrafieldscustom;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.springframework.security.authentication.AuthenticationServiceException;
+import org.springframework.security.core.Authentication;
+import org.springframework.security.core.AuthenticationException;
+import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;
+
+public class CustomAuthenticationFilter extends UsernamePasswordAuthenticationFilter {
+
+ public static final String SPRING_SECURITY_FORM_DOMAIN_KEY = "domain";
+
+ @Override
+ public Authentication attemptAuthentication(HttpServletRequest request, HttpServletResponse response)
+ throws AuthenticationException {
+
+ if (!request.getMethod().equals("POST")) {
+ throw new AuthenticationServiceException("Authentication method not supported: "
+ + request.getMethod());
+ }
+
+ CustomAuthenticationToken authRequest = getAuthRequest(request);
+ setDetails(request, authRequest);
+ return this.getAuthenticationManager().authenticate(authRequest);
+ }
+
+ private CustomAuthenticationToken getAuthRequest(HttpServletRequest request) {
+ String username = obtainUsername(request);
+ String password = obtainPassword(request);
+ String domain = obtainDomain(request);
+
+ if (username == null) {
+ username = "";
+ }
+ if (password == null) {
+ password = "";
+ }
+ if (domain == null) {
+ domain = "";
+ }
+
+ return new CustomAuthenticationToken(username, password, domain);
+ }
+
+ private String obtainDomain(HttpServletRequest request) {
+ return request.getParameter(SPRING_SECURITY_FORM_DOMAIN_KEY);
+ }
+}
diff --git a/spring-security-modules/spring-5-security/src/main/java/com/baeldung/loginextrafieldscustom/CustomAuthenticationToken.java b/spring-security-modules/spring-security-web-login/src/main/java/com/baeldung/loginextrafieldscustom/CustomAuthenticationToken.java
similarity index 97%
rename from spring-security-modules/spring-5-security/src/main/java/com/baeldung/loginextrafieldscustom/CustomAuthenticationToken.java
rename to spring-security-modules/spring-security-web-login/src/main/java/com/baeldung/loginextrafieldscustom/CustomAuthenticationToken.java
index 50995169a1..fd7624d965 100644
--- a/spring-security-modules/spring-5-security/src/main/java/com/baeldung/loginextrafieldscustom/CustomAuthenticationToken.java
+++ b/spring-security-modules/spring-security-web-login/src/main/java/com/baeldung/loginextrafieldscustom/CustomAuthenticationToken.java
@@ -1,28 +1,28 @@
-package com.baeldung.loginextrafieldscustom;
-
-import java.util.Collection;
-
-import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
-import org.springframework.security.core.GrantedAuthority;
-
-public class CustomAuthenticationToken extends UsernamePasswordAuthenticationToken {
-
- private String domain;
-
- public CustomAuthenticationToken(Object principal, Object credentials, String domain) {
- super(principal, credentials);
- this.domain = domain;
- super.setAuthenticated(false);
- }
-
- public CustomAuthenticationToken(Object principal, Object credentials, String domain,
- Collection extends GrantedAuthority> authorities) {
- super(principal, credentials, authorities);
- this.domain = domain;
- super.setAuthenticated(true); // must use super, as we override
- }
-
- public String getDomain() {
- return this.domain;
- }
-}
+package com.baeldung.loginextrafieldscustom;
+
+import java.util.Collection;
+
+import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
+import org.springframework.security.core.GrantedAuthority;
+
+public class CustomAuthenticationToken extends UsernamePasswordAuthenticationToken {
+
+ private String domain;
+
+ public CustomAuthenticationToken(Object principal, Object credentials, String domain) {
+ super(principal, credentials);
+ this.domain = domain;
+ super.setAuthenticated(false);
+ }
+
+ public CustomAuthenticationToken(Object principal, Object credentials, String domain,
+ Collection extends GrantedAuthority> authorities) {
+ super(principal, credentials, authorities);
+ this.domain = domain;
+ super.setAuthenticated(true); // must use super, as we override
+ }
+
+ public String getDomain() {
+ return this.domain;
+ }
+}
diff --git a/spring-security-modules/spring-5-security/src/main/java/com/baeldung/loginextrafieldscustom/CustomUserDetailsAuthenticationProvider.java b/spring-security-modules/spring-security-web-login/src/main/java/com/baeldung/loginextrafieldscustom/CustomUserDetailsAuthenticationProvider.java
similarity index 97%
rename from spring-security-modules/spring-5-security/src/main/java/com/baeldung/loginextrafieldscustom/CustomUserDetailsAuthenticationProvider.java
rename to spring-security-modules/spring-security-web-login/src/main/java/com/baeldung/loginextrafieldscustom/CustomUserDetailsAuthenticationProvider.java
index 693900d843..85d768aaab 100644
--- a/spring-security-modules/spring-5-security/src/main/java/com/baeldung/loginextrafieldscustom/CustomUserDetailsAuthenticationProvider.java
+++ b/spring-security-modules/spring-security-web-login/src/main/java/com/baeldung/loginextrafieldscustom/CustomUserDetailsAuthenticationProvider.java
@@ -1,92 +1,92 @@
-package com.baeldung.loginextrafieldscustom;
-
-import org.springframework.security.authentication.BadCredentialsException;
-import org.springframework.security.authentication.InternalAuthenticationServiceException;
-import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
-import org.springframework.security.authentication.dao.AbstractUserDetailsAuthenticationProvider;
-import org.springframework.security.core.AuthenticationException;
-import org.springframework.security.core.userdetails.UserDetails;
-import org.springframework.security.core.userdetails.UsernameNotFoundException;
-import org.springframework.security.crypto.password.PasswordEncoder;
-import org.springframework.util.Assert;
-
-public class CustomUserDetailsAuthenticationProvider extends AbstractUserDetailsAuthenticationProvider {
-
- /**
- * The plaintext password used to perform
- * PasswordEncoder#matches(CharSequence, String)} on when the user is
- * not found to avoid SEC-2056.
- */
- private static final String USER_NOT_FOUND_PASSWORD = "userNotFoundPassword";
-
- private PasswordEncoder passwordEncoder;
- private CustomUserDetailsService userDetailsService;
-
- /**
- * The password used to perform
- * {@link PasswordEncoder#matches(CharSequence, String)} on when the user is
- * not found to avoid SEC-2056. This is necessary, because some
- * {@link PasswordEncoder} implementations will short circuit if the password is not
- * in a valid format.
- */
- private String userNotFoundEncodedPassword;
-
- public CustomUserDetailsAuthenticationProvider(PasswordEncoder passwordEncoder, CustomUserDetailsService userDetailsService) {
- this.passwordEncoder = passwordEncoder;
- this.userDetailsService = userDetailsService;
- }
-
- @Override
- protected void additionalAuthenticationChecks(UserDetails userDetails, UsernamePasswordAuthenticationToken authentication)
- throws AuthenticationException {
-
- if (authentication.getCredentials() == null) {
- logger.debug("Authentication failed: no credentials provided");
- throw new BadCredentialsException(
- messages.getMessage("AbstractUserDetailsAuthenticationProvider.badCredentials", "Bad credentials"));
- }
-
- String presentedPassword = authentication.getCredentials()
- .toString();
-
- if (!passwordEncoder.matches(presentedPassword, userDetails.getPassword())) {
- logger.debug("Authentication failed: password does not match stored value");
- throw new BadCredentialsException(
- messages.getMessage("AbstractUserDetailsAuthenticationProvider.badCredentials", "Bad credentials"));
- }
- }
-
- @Override
- protected void doAfterPropertiesSet() throws Exception {
- Assert.notNull(this.userDetailsService, "A UserDetailsService must be set");
- this.userNotFoundEncodedPassword = this.passwordEncoder.encode(USER_NOT_FOUND_PASSWORD);
- }
-
- @Override
- protected UserDetails retrieveUser(String username, UsernamePasswordAuthenticationToken authentication)
- throws AuthenticationException {
- CustomAuthenticationToken auth = (CustomAuthenticationToken) authentication;
- UserDetails loadedUser;
-
- try {
- loadedUser = this.userDetailsService.loadUserByUsernameAndDomain(auth.getPrincipal()
- .toString(), auth.getDomain());
- } catch (UsernameNotFoundException notFound) {
- if (authentication.getCredentials() != null) {
- String presentedPassword = authentication.getCredentials()
- .toString();
- passwordEncoder.matches(presentedPassword, userNotFoundEncodedPassword);
- }
- throw notFound;
- } catch (Exception repositoryProblem) {
- throw new InternalAuthenticationServiceException(repositoryProblem.getMessage(), repositoryProblem);
- }
-
- if (loadedUser == null) {
- throw new InternalAuthenticationServiceException("UserDetailsService returned null, "
- + "which is an interface contract violation");
- }
- return loadedUser;
- }
-
-}
+package com.baeldung.loginextrafieldscustom;
+
+import org.springframework.security.authentication.BadCredentialsException;
+import org.springframework.security.authentication.InternalAuthenticationServiceException;
+import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
+import org.springframework.security.authentication.dao.AbstractUserDetailsAuthenticationProvider;
+import org.springframework.security.core.AuthenticationException;
+import org.springframework.security.core.userdetails.UserDetails;
+import org.springframework.security.core.userdetails.UsernameNotFoundException;
+import org.springframework.security.crypto.password.PasswordEncoder;
+import org.springframework.util.Assert;
+
+public class CustomUserDetailsAuthenticationProvider extends AbstractUserDetailsAuthenticationProvider {
+
+ /**
+ * The plaintext password used to perform
+ * PasswordEncoder#matches(CharSequence, String)} on when the user is
+ * not found to avoid SEC-2056.
+ */
+ private static final String USER_NOT_FOUND_PASSWORD = "userNotFoundPassword";
+
+ private PasswordEncoder passwordEncoder;
+ private CustomUserDetailsService userDetailsService;
+
+ /**
+ * The password used to perform
+ * {@link PasswordEncoder#matches(CharSequence, String)} on when the user is
+ * not found to avoid SEC-2056. This is necessary, because some
+ * {@link PasswordEncoder} implementations will short circuit if the password is not
+ * in a valid format.
+ */
+ private String userNotFoundEncodedPassword;
+
+ public CustomUserDetailsAuthenticationProvider(PasswordEncoder passwordEncoder, CustomUserDetailsService userDetailsService) {
+ this.passwordEncoder = passwordEncoder;
+ this.userDetailsService = userDetailsService;
+ }
+
+ @Override
+ protected void additionalAuthenticationChecks(UserDetails userDetails, UsernamePasswordAuthenticationToken authentication)
+ throws AuthenticationException {
+
+ if (authentication.getCredentials() == null) {
+ logger.debug("Authentication failed: no credentials provided");
+ throw new BadCredentialsException(
+ messages.getMessage("AbstractUserDetailsAuthenticationProvider.badCredentials", "Bad credentials"));
+ }
+
+ String presentedPassword = authentication.getCredentials()
+ .toString();
+
+ if (!passwordEncoder.matches(presentedPassword, userDetails.getPassword())) {
+ logger.debug("Authentication failed: password does not match stored value");
+ throw new BadCredentialsException(
+ messages.getMessage("AbstractUserDetailsAuthenticationProvider.badCredentials", "Bad credentials"));
+ }
+ }
+
+ @Override
+ protected void doAfterPropertiesSet() throws Exception {
+ Assert.notNull(this.userDetailsService, "A UserDetailsService must be set");
+ this.userNotFoundEncodedPassword = this.passwordEncoder.encode(USER_NOT_FOUND_PASSWORD);
+ }
+
+ @Override
+ protected UserDetails retrieveUser(String username, UsernamePasswordAuthenticationToken authentication)
+ throws AuthenticationException {
+ CustomAuthenticationToken auth = (CustomAuthenticationToken) authentication;
+ UserDetails loadedUser;
+
+ try {
+ loadedUser = this.userDetailsService.loadUserByUsernameAndDomain(auth.getPrincipal()
+ .toString(), auth.getDomain());
+ } catch (UsernameNotFoundException notFound) {
+ if (authentication.getCredentials() != null) {
+ String presentedPassword = authentication.getCredentials()
+ .toString();
+ passwordEncoder.matches(presentedPassword, userNotFoundEncodedPassword);
+ }
+ throw notFound;
+ } catch (Exception repositoryProblem) {
+ throw new InternalAuthenticationServiceException(repositoryProblem.getMessage(), repositoryProblem);
+ }
+
+ if (loadedUser == null) {
+ throw new InternalAuthenticationServiceException("UserDetailsService returned null, "
+ + "which is an interface contract violation");
+ }
+ return loadedUser;
+ }
+
+}
diff --git a/spring-security-modules/spring-5-security/src/main/java/com/baeldung/loginextrafieldscustom/CustomUserDetailsService.java b/spring-security-modules/spring-security-web-login/src/main/java/com/baeldung/loginextrafieldscustom/CustomUserDetailsService.java
similarity index 97%
rename from spring-security-modules/spring-5-security/src/main/java/com/baeldung/loginextrafieldscustom/CustomUserDetailsService.java
rename to spring-security-modules/spring-security-web-login/src/main/java/com/baeldung/loginextrafieldscustom/CustomUserDetailsService.java
index 358129173d..fa690edade 100644
--- a/spring-security-modules/spring-5-security/src/main/java/com/baeldung/loginextrafieldscustom/CustomUserDetailsService.java
+++ b/spring-security-modules/spring-security-web-login/src/main/java/com/baeldung/loginextrafieldscustom/CustomUserDetailsService.java
@@ -1,10 +1,10 @@
-package com.baeldung.loginextrafieldscustom;
-
-import org.springframework.security.core.userdetails.UserDetails;
-import org.springframework.security.core.userdetails.UsernameNotFoundException;
-
-public interface CustomUserDetailsService {
-
- UserDetails loadUserByUsernameAndDomain(String username, String domain) throws UsernameNotFoundException;
-
-}
+package com.baeldung.loginextrafieldscustom;
+
+import org.springframework.security.core.userdetails.UserDetails;
+import org.springframework.security.core.userdetails.UsernameNotFoundException;
+
+public interface CustomUserDetailsService {
+
+ UserDetails loadUserByUsernameAndDomain(String username, String domain) throws UsernameNotFoundException;
+
+}
diff --git a/spring-security-modules/spring-5-security/src/main/java/com/baeldung/loginextrafieldscustom/CustomUserDetailsServiceImpl.java b/spring-security-modules/spring-security-web-login/src/main/java/com/baeldung/loginextrafieldscustom/CustomUserDetailsServiceImpl.java
similarity index 97%
rename from spring-security-modules/spring-5-security/src/main/java/com/baeldung/loginextrafieldscustom/CustomUserDetailsServiceImpl.java
rename to spring-security-modules/spring-security-web-login/src/main/java/com/baeldung/loginextrafieldscustom/CustomUserDetailsServiceImpl.java
index ea979e2fab..056bd47b20 100644
--- a/spring-security-modules/spring-5-security/src/main/java/com/baeldung/loginextrafieldscustom/CustomUserDetailsServiceImpl.java
+++ b/spring-security-modules/spring-security-web-login/src/main/java/com/baeldung/loginextrafieldscustom/CustomUserDetailsServiceImpl.java
@@ -1,30 +1,30 @@
-package com.baeldung.loginextrafieldscustom;
-
-import org.apache.commons.lang3.StringUtils;
-import org.springframework.security.core.userdetails.UserDetails;
-import org.springframework.security.core.userdetails.UsernameNotFoundException;
-import org.springframework.stereotype.Service;
-
-@Service("userDetailsService")
-public class CustomUserDetailsServiceImpl implements CustomUserDetailsService {
-
- private UserRepository userRepository;
-
- public CustomUserDetailsServiceImpl(UserRepository userRepository) {
- this.userRepository = userRepository;
- }
-
- @Override
- public UserDetails loadUserByUsernameAndDomain(String username, String domain) throws UsernameNotFoundException {
- if (StringUtils.isAnyBlank(username, domain)) {
- throw new UsernameNotFoundException("Username and domain must be provided");
- }
- User user = userRepository.findUser(username, domain);
- if (user == null) {
- throw new UsernameNotFoundException(
- String.format("Username not found for domain, username=%s, domain=%s",
- username, domain));
- }
- return user;
- }
-}
+package com.baeldung.loginextrafieldscustom;
+
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.security.core.userdetails.UserDetails;
+import org.springframework.security.core.userdetails.UsernameNotFoundException;
+import org.springframework.stereotype.Service;
+
+@Service("userDetailsService")
+public class CustomUserDetailsServiceImpl implements CustomUserDetailsService {
+
+ private UserRepository userRepository;
+
+ public CustomUserDetailsServiceImpl(UserRepository userRepository) {
+ this.userRepository = userRepository;
+ }
+
+ @Override
+ public UserDetails loadUserByUsernameAndDomain(String username, String domain) throws UsernameNotFoundException {
+ if (StringUtils.isAnyBlank(username, domain)) {
+ throw new UsernameNotFoundException("Username and domain must be provided");
+ }
+ User user = userRepository.findUser(username, domain);
+ if (user == null) {
+ throw new UsernameNotFoundException(
+ String.format("Username not found for domain, username=%s, domain=%s",
+ username, domain));
+ }
+ return user;
+ }
+}
diff --git a/spring-security-modules/spring-5-security/src/main/java/com/baeldung/loginextrafieldscustom/CustomUserRepository.java b/spring-security-modules/spring-security-web-login/src/main/java/com/baeldung/loginextrafieldscustom/CustomUserRepository.java
similarity index 92%
rename from spring-security-modules/spring-5-security/src/main/java/com/baeldung/loginextrafieldscustom/CustomUserRepository.java
rename to spring-security-modules/spring-security-web-login/src/main/java/com/baeldung/loginextrafieldscustom/CustomUserRepository.java
index effc750940..fbc2851dc1 100644
--- a/spring-security-modules/spring-5-security/src/main/java/com/baeldung/loginextrafieldscustom/CustomUserRepository.java
+++ b/spring-security-modules/spring-security-web-login/src/main/java/com/baeldung/loginextrafieldscustom/CustomUserRepository.java
@@ -1,33 +1,33 @@
-package com.baeldung.loginextrafieldscustom;
-
-import java.util.ArrayList;
-import java.util.Collection;
-
-import org.apache.commons.lang3.StringUtils;
-import org.springframework.security.core.GrantedAuthority;
-import org.springframework.security.crypto.password.PasswordEncoder;
-import org.springframework.stereotype.Repository;
-
-@Repository("userRepository")
-public class CustomUserRepository implements UserRepository {
-
- private PasswordEncoder passwordEncoder;
-
- public CustomUserRepository(PasswordEncoder passwordEncoder) {
- this.passwordEncoder = passwordEncoder;
- }
-
- @Override
- public User findUser(String username, String domain) {
- if (StringUtils.isAnyBlank(username, domain)) {
- return null;
- } else {
- Collection extends GrantedAuthority> authorities = new ArrayList<>();
- User user = new User(username, domain,
- passwordEncoder.encode("secret"), true,
- true, true, true, authorities);
- return user;
- }
- }
-
-}
+package com.baeldung.loginextrafieldscustom;
+
+import java.util.ArrayList;
+import java.util.Collection;
+
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.security.core.GrantedAuthority;
+import org.springframework.security.crypto.password.PasswordEncoder;
+import org.springframework.stereotype.Repository;
+
+@Repository("userRepository")
+public class CustomUserRepository implements UserRepository {
+
+ private PasswordEncoder passwordEncoder;
+
+ public CustomUserRepository(PasswordEncoder passwordEncoder) {
+ this.passwordEncoder = passwordEncoder;
+ }
+
+ @Override
+ public User findUser(String username, String domain) {
+ if (StringUtils.isAnyBlank(username, domain)) {
+ return null;
+ } else {
+ Collection extends GrantedAuthority> authorities = new ArrayList<>();
+ User user = new User(username, domain,
+ passwordEncoder.encode("secret"), true,
+ true, true, true, authorities);
+ return user;
+ }
+ }
+
+}
diff --git a/spring-security-modules/spring-5-security/src/main/java/com/baeldung/loginextrafieldscustom/ExtraLoginFieldsApplication.java b/spring-security-modules/spring-security-web-login/src/main/java/com/baeldung/loginextrafieldscustom/ExtraLoginFieldsApplication.java
similarity index 100%
rename from spring-security-modules/spring-5-security/src/main/java/com/baeldung/loginextrafieldscustom/ExtraLoginFieldsApplication.java
rename to spring-security-modules/spring-security-web-login/src/main/java/com/baeldung/loginextrafieldscustom/ExtraLoginFieldsApplication.java
diff --git a/spring-security-modules/spring-5-security/src/main/java/com/baeldung/loginextrafieldscustom/PasswordEncoderConfiguration.java b/spring-security-modules/spring-security-web-login/src/main/java/com/baeldung/loginextrafieldscustom/PasswordEncoderConfiguration.java
similarity index 100%
rename from spring-security-modules/spring-5-security/src/main/java/com/baeldung/loginextrafieldscustom/PasswordEncoderConfiguration.java
rename to spring-security-modules/spring-security-web-login/src/main/java/com/baeldung/loginextrafieldscustom/PasswordEncoderConfiguration.java
diff --git a/spring-security-modules/spring-5-security/src/main/java/com/baeldung/loginextrafieldscustom/SecurityConfig.java b/spring-security-modules/spring-security-web-login/src/main/java/com/baeldung/loginextrafieldscustom/SecurityConfig.java
similarity index 97%
rename from spring-security-modules/spring-5-security/src/main/java/com/baeldung/loginextrafieldscustom/SecurityConfig.java
rename to spring-security-modules/spring-security-web-login/src/main/java/com/baeldung/loginextrafieldscustom/SecurityConfig.java
index e7b56e5763..d20b7a10dc 100644
--- a/spring-security-modules/spring-5-security/src/main/java/com/baeldung/loginextrafieldscustom/SecurityConfig.java
+++ b/spring-security-modules/spring-security-web-login/src/main/java/com/baeldung/loginextrafieldscustom/SecurityConfig.java
@@ -1,63 +1,63 @@
-package com.baeldung.loginextrafieldscustom;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.PropertySource;
-import org.springframework.security.authentication.AuthenticationProvider;
-import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
-import org.springframework.security.config.annotation.web.builders.HttpSecurity;
-import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
-import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
-import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
-import org.springframework.security.crypto.password.PasswordEncoder;
-import org.springframework.security.web.authentication.SimpleUrlAuthenticationFailureHandler;
-import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;
-
-@EnableWebSecurity
-@PropertySource("classpath:/application-extrafields.properties")
-public class SecurityConfig extends WebSecurityConfigurerAdapter {
-
- @Autowired
- private CustomUserDetailsService userDetailsService;
-
- @Autowired
- private PasswordEncoder passwordEncoder;
-
- @Override
- protected void configure(HttpSecurity http) throws Exception {
-
- http
- .addFilterBefore(authenticationFilter(), UsernamePasswordAuthenticationFilter.class)
- .authorizeRequests()
- .antMatchers("/css/**", "/index").permitAll()
- .antMatchers("/user/**").authenticated()
- .and()
- .formLogin().loginPage("/login")
- .and()
- .logout()
- .logoutUrl("/logout");
- }
-
- public CustomAuthenticationFilter authenticationFilter() throws Exception {
- CustomAuthenticationFilter filter = new CustomAuthenticationFilter();
- filter.setAuthenticationManager(authenticationManagerBean());
- filter.setAuthenticationFailureHandler(failureHandler());
- return filter;
- }
-
- @Autowired
- public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
- auth.authenticationProvider(authProvider());
- }
-
- public AuthenticationProvider authProvider() {
- CustomUserDetailsAuthenticationProvider provider
- = new CustomUserDetailsAuthenticationProvider(passwordEncoder, userDetailsService);
- return provider;
- }
-
- public SimpleUrlAuthenticationFailureHandler failureHandler() {
- return new SimpleUrlAuthenticationFailureHandler("/login?error=true");
- }
-
-}
+package com.baeldung.loginextrafieldscustom;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.PropertySource;
+import org.springframework.security.authentication.AuthenticationProvider;
+import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
+import org.springframework.security.config.annotation.web.builders.HttpSecurity;
+import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
+import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
+import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
+import org.springframework.security.crypto.password.PasswordEncoder;
+import org.springframework.security.web.authentication.SimpleUrlAuthenticationFailureHandler;
+import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;
+
+@EnableWebSecurity
+@PropertySource("classpath:/application-extrafields.properties")
+public class SecurityConfig extends WebSecurityConfigurerAdapter {
+
+ @Autowired
+ private CustomUserDetailsService userDetailsService;
+
+ @Autowired
+ private PasswordEncoder passwordEncoder;
+
+ @Override
+ protected void configure(HttpSecurity http) throws Exception {
+
+ http
+ .addFilterBefore(authenticationFilter(), UsernamePasswordAuthenticationFilter.class)
+ .authorizeRequests()
+ .antMatchers("/css/**", "/index").permitAll()
+ .antMatchers("/user/**").authenticated()
+ .and()
+ .formLogin().loginPage("/login")
+ .and()
+ .logout()
+ .logoutUrl("/logout");
+ }
+
+ public CustomAuthenticationFilter authenticationFilter() throws Exception {
+ CustomAuthenticationFilter filter = new CustomAuthenticationFilter();
+ filter.setAuthenticationManager(authenticationManagerBean());
+ filter.setAuthenticationFailureHandler(failureHandler());
+ return filter;
+ }
+
+ @Autowired
+ public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
+ auth.authenticationProvider(authProvider());
+ }
+
+ public AuthenticationProvider authProvider() {
+ CustomUserDetailsAuthenticationProvider provider
+ = new CustomUserDetailsAuthenticationProvider(passwordEncoder, userDetailsService);
+ return provider;
+ }
+
+ public SimpleUrlAuthenticationFailureHandler failureHandler() {
+ return new SimpleUrlAuthenticationFailureHandler("/login?error=true");
+ }
+
+}
diff --git a/spring-security-modules/spring-5-security/src/main/java/com/baeldung/loginextrafieldscustom/User.java b/spring-security-modules/spring-security-web-login/src/main/java/com/baeldung/loginextrafieldscustom/User.java
similarity index 97%
rename from spring-security-modules/spring-5-security/src/main/java/com/baeldung/loginextrafieldscustom/User.java
rename to spring-security-modules/spring-security-web-login/src/main/java/com/baeldung/loginextrafieldscustom/User.java
index aa03f15b6a..be4730592b 100644
--- a/spring-security-modules/spring-5-security/src/main/java/com/baeldung/loginextrafieldscustom/User.java
+++ b/spring-security-modules/spring-security-web-login/src/main/java/com/baeldung/loginextrafieldscustom/User.java
@@ -1,23 +1,23 @@
-package com.baeldung.loginextrafieldscustom;
-
-import java.util.Collection;
-
-import org.springframework.security.core.GrantedAuthority;
-
-public class User extends org.springframework.security.core.userdetails.User {
-
- private static final long serialVersionUID = 1L;
-
- private String domain;
-
- public User(String username, String domain, String password, boolean enabled,
- boolean accountNonExpired, boolean credentialsNonExpired,
- boolean accountNonLocked, Collection extends GrantedAuthority> authorities) {
- super(username, password, enabled, accountNonExpired, credentialsNonExpired, accountNonLocked, authorities);
- this.domain = domain;
- }
-
- public String getDomain() {
- return domain;
- }
-}
+package com.baeldung.loginextrafieldscustom;
+
+import java.util.Collection;
+
+import org.springframework.security.core.GrantedAuthority;
+
+public class User extends org.springframework.security.core.userdetails.User {
+
+ private static final long serialVersionUID = 1L;
+
+ private String domain;
+
+ public User(String username, String domain, String password, boolean enabled,
+ boolean accountNonExpired, boolean credentialsNonExpired,
+ boolean accountNonLocked, Collection extends GrantedAuthority> authorities) {
+ super(username, password, enabled, accountNonExpired, credentialsNonExpired, accountNonLocked, authorities);
+ this.domain = domain;
+ }
+
+ public String getDomain() {
+ return domain;
+ }
+}
diff --git a/spring-security-modules/spring-5-security/src/main/java/com/baeldung/loginextrafieldscustom/UserRepository.java b/spring-security-modules/spring-security-web-login/src/main/java/com/baeldung/loginextrafieldscustom/UserRepository.java
similarity index 95%
rename from spring-security-modules/spring-5-security/src/main/java/com/baeldung/loginextrafieldscustom/UserRepository.java
rename to spring-security-modules/spring-security-web-login/src/main/java/com/baeldung/loginextrafieldscustom/UserRepository.java
index e2358e055b..a6dea786f0 100644
--- a/spring-security-modules/spring-5-security/src/main/java/com/baeldung/loginextrafieldscustom/UserRepository.java
+++ b/spring-security-modules/spring-security-web-login/src/main/java/com/baeldung/loginextrafieldscustom/UserRepository.java
@@ -1,7 +1,7 @@
-package com.baeldung.loginextrafieldscustom;
-
-public interface UserRepository {
-
- public User findUser(String username, String domain);
-
-}
+package com.baeldung.loginextrafieldscustom;
+
+public interface UserRepository {
+
+ public User findUser(String username, String domain);
+
+}
diff --git a/spring-security-modules/spring-5-security/src/main/java/com/baeldung/loginextrafieldscustom/WebController.java b/spring-security-modules/spring-security-web-login/src/main/java/com/baeldung/loginextrafieldscustom/WebController.java
similarity index 96%
rename from spring-security-modules/spring-5-security/src/main/java/com/baeldung/loginextrafieldscustom/WebController.java
rename to spring-security-modules/spring-security-web-login/src/main/java/com/baeldung/loginextrafieldscustom/WebController.java
index b5e0b511ac..4f0d4013ff 100644
--- a/spring-security-modules/spring-5-security/src/main/java/com/baeldung/loginextrafieldscustom/WebController.java
+++ b/spring-security-modules/spring-security-web-login/src/main/java/com/baeldung/loginextrafieldscustom/WebController.java
@@ -1,51 +1,51 @@
-package com.baeldung.loginextrafieldscustom;
-
-import java.util.Optional;
-
-import org.springframework.security.authentication.AnonymousAuthenticationToken;
-import org.springframework.security.core.Authentication;
-import org.springframework.security.core.context.SecurityContextHolder;
-import org.springframework.stereotype.Controller;
-import org.springframework.ui.Model;
-import org.springframework.web.bind.annotation.RequestMapping;
-
-@Controller
-public class WebController {
-
- @RequestMapping("/")
- public String root() {
- return "redirect:/index";
- }
-
- @RequestMapping("/index")
- public String index(Model model) {
- getDomain().ifPresent(d -> {
- model.addAttribute("domain", d);
- });
- return "index";
- }
-
- @RequestMapping("/user/index")
- public String userIndex(Model model) {
- getDomain().ifPresent(d -> {
- model.addAttribute("domain", d);
- });
- return "user/index";
- }
-
- @RequestMapping("/login")
- public String login() {
- return "login";
- }
-
- private Optional getDomain() {
- Authentication auth = SecurityContextHolder.getContext()
- .getAuthentication();
- String domain = null;
- if (auth != null && !auth.getClass().equals(AnonymousAuthenticationToken.class)) {
- User user = (User) auth.getPrincipal();
- domain = user.getDomain();
- }
- return Optional.ofNullable(domain);
- }
-}
+package com.baeldung.loginextrafieldscustom;
+
+import java.util.Optional;
+
+import org.springframework.security.authentication.AnonymousAuthenticationToken;
+import org.springframework.security.core.Authentication;
+import org.springframework.security.core.context.SecurityContextHolder;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.Model;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+@Controller
+public class WebController {
+
+ @RequestMapping("/")
+ public String root() {
+ return "redirect:/index";
+ }
+
+ @RequestMapping("/index")
+ public String index(Model model) {
+ getDomain().ifPresent(d -> {
+ model.addAttribute("domain", d);
+ });
+ return "index";
+ }
+
+ @RequestMapping("/user/index")
+ public String userIndex(Model model) {
+ getDomain().ifPresent(d -> {
+ model.addAttribute("domain", d);
+ });
+ return "user/index";
+ }
+
+ @RequestMapping("/login")
+ public String login() {
+ return "login";
+ }
+
+ private Optional getDomain() {
+ Authentication auth = SecurityContextHolder.getContext()
+ .getAuthentication();
+ String domain = null;
+ if (auth != null && !auth.getClass().equals(AnonymousAuthenticationToken.class)) {
+ User user = (User) auth.getPrincipal();
+ domain = user.getDomain();
+ }
+ return Optional.ofNullable(domain);
+ }
+}
diff --git a/spring-security-modules/spring-5-security/src/main/java/com/baeldung/loginextrafieldssimple/ExtraLoginFieldsApplication.java b/spring-security-modules/spring-security-web-login/src/main/java/com/baeldung/loginextrafieldssimple/ExtraLoginFieldsApplication.java
similarity index 100%
rename from spring-security-modules/spring-5-security/src/main/java/com/baeldung/loginextrafieldssimple/ExtraLoginFieldsApplication.java
rename to spring-security-modules/spring-security-web-login/src/main/java/com/baeldung/loginextrafieldssimple/ExtraLoginFieldsApplication.java
diff --git a/spring-security-modules/spring-5-security/src/main/java/com/baeldung/loginextrafieldssimple/PasswordEncoderConfiguration.java b/spring-security-modules/spring-security-web-login/src/main/java/com/baeldung/loginextrafieldssimple/PasswordEncoderConfiguration.java
similarity index 100%
rename from spring-security-modules/spring-5-security/src/main/java/com/baeldung/loginextrafieldssimple/PasswordEncoderConfiguration.java
rename to spring-security-modules/spring-security-web-login/src/main/java/com/baeldung/loginextrafieldssimple/PasswordEncoderConfiguration.java
diff --git a/spring-security-modules/spring-5-security/src/main/java/com/baeldung/loginextrafieldssimple/SecurityConfig.java b/spring-security-modules/spring-security-web-login/src/main/java/com/baeldung/loginextrafieldssimple/SecurityConfig.java
similarity index 97%
rename from spring-security-modules/spring-5-security/src/main/java/com/baeldung/loginextrafieldssimple/SecurityConfig.java
rename to spring-security-modules/spring-security-web-login/src/main/java/com/baeldung/loginextrafieldssimple/SecurityConfig.java
index 6d3d51ad30..2989a4bbc6 100644
--- a/spring-security-modules/spring-5-security/src/main/java/com/baeldung/loginextrafieldssimple/SecurityConfig.java
+++ b/spring-security-modules/spring-security-web-login/src/main/java/com/baeldung/loginextrafieldssimple/SecurityConfig.java
@@ -1,66 +1,66 @@
-package com.baeldung.loginextrafieldssimple;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.PropertySource;
-import org.springframework.security.authentication.AuthenticationProvider;
-import org.springframework.security.authentication.dao.DaoAuthenticationProvider;
-import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
-import org.springframework.security.config.annotation.web.builders.HttpSecurity;
-import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
-import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
-import org.springframework.security.core.userdetails.UserDetailsService;
-import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
-import org.springframework.security.crypto.password.PasswordEncoder;
-import org.springframework.security.web.authentication.SimpleUrlAuthenticationFailureHandler;
-import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;
-
-@EnableWebSecurity
-@PropertySource("classpath:/application-extrafields.properties")
-public class SecurityConfig extends WebSecurityConfigurerAdapter {
-
- @Autowired
- private UserDetailsService userDetailsService;
-
- @Autowired
- private PasswordEncoder passwordEncoder;
-
- @Override
- protected void configure(HttpSecurity http) throws Exception {
-
- http
- .addFilterBefore(authenticationFilter(), UsernamePasswordAuthenticationFilter.class)
- .authorizeRequests()
- .antMatchers("/css/**", "/index").permitAll()
- .antMatchers("/user/**").authenticated()
- .and()
- .formLogin().loginPage("/login")
- .and()
- .logout()
- .logoutUrl("/logout");
- }
-
- public SimpleAuthenticationFilter authenticationFilter() throws Exception {
- SimpleAuthenticationFilter filter = new SimpleAuthenticationFilter();
- filter.setAuthenticationManager(authenticationManagerBean());
- filter.setAuthenticationFailureHandler(failureHandler());
- return filter;
- }
-
- @Autowired
- public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
- auth.authenticationProvider(authProvider());
- }
-
- public AuthenticationProvider authProvider() {
- DaoAuthenticationProvider provider = new DaoAuthenticationProvider();
- provider.setUserDetailsService(userDetailsService);
- provider.setPasswordEncoder(passwordEncoder);
- return provider;
- }
-
- public SimpleUrlAuthenticationFailureHandler failureHandler() {
- return new SimpleUrlAuthenticationFailureHandler("/login?error=true");
- }
-
-}
+package com.baeldung.loginextrafieldssimple;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.PropertySource;
+import org.springframework.security.authentication.AuthenticationProvider;
+import org.springframework.security.authentication.dao.DaoAuthenticationProvider;
+import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
+import org.springframework.security.config.annotation.web.builders.HttpSecurity;
+import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
+import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
+import org.springframework.security.core.userdetails.UserDetailsService;
+import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
+import org.springframework.security.crypto.password.PasswordEncoder;
+import org.springframework.security.web.authentication.SimpleUrlAuthenticationFailureHandler;
+import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;
+
+@EnableWebSecurity
+@PropertySource("classpath:/application-extrafields.properties")
+public class SecurityConfig extends WebSecurityConfigurerAdapter {
+
+ @Autowired
+ private UserDetailsService userDetailsService;
+
+ @Autowired
+ private PasswordEncoder passwordEncoder;
+
+ @Override
+ protected void configure(HttpSecurity http) throws Exception {
+
+ http
+ .addFilterBefore(authenticationFilter(), UsernamePasswordAuthenticationFilter.class)
+ .authorizeRequests()
+ .antMatchers("/css/**", "/index").permitAll()
+ .antMatchers("/user/**").authenticated()
+ .and()
+ .formLogin().loginPage("/login")
+ .and()
+ .logout()
+ .logoutUrl("/logout");
+ }
+
+ public SimpleAuthenticationFilter authenticationFilter() throws Exception {
+ SimpleAuthenticationFilter filter = new SimpleAuthenticationFilter();
+ filter.setAuthenticationManager(authenticationManagerBean());
+ filter.setAuthenticationFailureHandler(failureHandler());
+ return filter;
+ }
+
+ @Autowired
+ public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
+ auth.authenticationProvider(authProvider());
+ }
+
+ public AuthenticationProvider authProvider() {
+ DaoAuthenticationProvider provider = new DaoAuthenticationProvider();
+ provider.setUserDetailsService(userDetailsService);
+ provider.setPasswordEncoder(passwordEncoder);
+ return provider;
+ }
+
+ public SimpleUrlAuthenticationFailureHandler failureHandler() {
+ return new SimpleUrlAuthenticationFailureHandler("/login?error=true");
+ }
+
+}
diff --git a/spring-security-modules/spring-5-security/src/main/java/com/baeldung/loginextrafieldssimple/SimpleAuthenticationFilter.java b/spring-security-modules/spring-security-web-login/src/main/java/com/baeldung/loginextrafieldssimple/SimpleAuthenticationFilter.java
similarity index 97%
rename from spring-security-modules/spring-5-security/src/main/java/com/baeldung/loginextrafieldssimple/SimpleAuthenticationFilter.java
rename to spring-security-modules/spring-security-web-login/src/main/java/com/baeldung/loginextrafieldssimple/SimpleAuthenticationFilter.java
index 9dcb524157..7e21e1b82e 100644
--- a/spring-security-modules/spring-5-security/src/main/java/com/baeldung/loginextrafieldssimple/SimpleAuthenticationFilter.java
+++ b/spring-security-modules/spring-security-web-login/src/main/java/com/baeldung/loginextrafieldssimple/SimpleAuthenticationFilter.java
@@ -1,54 +1,54 @@
-package com.baeldung.loginextrafieldssimple;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.springframework.security.authentication.AuthenticationServiceException;
-import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
-import org.springframework.security.core.Authentication;
-import org.springframework.security.core.AuthenticationException;
-import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;
-
-public class SimpleAuthenticationFilter extends UsernamePasswordAuthenticationFilter {
-
- public static final String SPRING_SECURITY_FORM_DOMAIN_KEY = "domain";
-
- @Override
- public Authentication attemptAuthentication(HttpServletRequest request, HttpServletResponse response)
- throws AuthenticationException {
-
- if (!request.getMethod()
- .equals("POST")) {
- throw new AuthenticationServiceException("Authentication method not supported: " + request.getMethod());
- }
-
- UsernamePasswordAuthenticationToken authRequest = getAuthRequest(request);
- setDetails(request, authRequest);
- return this.getAuthenticationManager()
- .authenticate(authRequest);
- }
-
- private UsernamePasswordAuthenticationToken getAuthRequest(HttpServletRequest request) {
- String username = obtainUsername(request);
- String password = obtainPassword(request);
- String domain = obtainDomain(request);
-
- if (username == null) {
- username = "";
- }
- if (password == null) {
- password = "";
- }
- if (domain == null) {
- domain = "";
- }
-
- String usernameDomain = String.format("%s%s%s", username.trim(),
- String.valueOf(Character.LINE_SEPARATOR), domain);
- return new UsernamePasswordAuthenticationToken(usernameDomain, password);
- }
-
- private String obtainDomain(HttpServletRequest request) {
- return request.getParameter(SPRING_SECURITY_FORM_DOMAIN_KEY);
- }
-}
+package com.baeldung.loginextrafieldssimple;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.springframework.security.authentication.AuthenticationServiceException;
+import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
+import org.springframework.security.core.Authentication;
+import org.springframework.security.core.AuthenticationException;
+import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;
+
+public class SimpleAuthenticationFilter extends UsernamePasswordAuthenticationFilter {
+
+ public static final String SPRING_SECURITY_FORM_DOMAIN_KEY = "domain";
+
+ @Override
+ public Authentication attemptAuthentication(HttpServletRequest request, HttpServletResponse response)
+ throws AuthenticationException {
+
+ if (!request.getMethod()
+ .equals("POST")) {
+ throw new AuthenticationServiceException("Authentication method not supported: " + request.getMethod());
+ }
+
+ UsernamePasswordAuthenticationToken authRequest = getAuthRequest(request);
+ setDetails(request, authRequest);
+ return this.getAuthenticationManager()
+ .authenticate(authRequest);
+ }
+
+ private UsernamePasswordAuthenticationToken getAuthRequest(HttpServletRequest request) {
+ String username = obtainUsername(request);
+ String password = obtainPassword(request);
+ String domain = obtainDomain(request);
+
+ if (username == null) {
+ username = "";
+ }
+ if (password == null) {
+ password = "";
+ }
+ if (domain == null) {
+ domain = "";
+ }
+
+ String usernameDomain = String.format("%s%s%s", username.trim(),
+ String.valueOf(Character.LINE_SEPARATOR), domain);
+ return new UsernamePasswordAuthenticationToken(usernameDomain, password);
+ }
+
+ private String obtainDomain(HttpServletRequest request) {
+ return request.getParameter(SPRING_SECURITY_FORM_DOMAIN_KEY);
+ }
+}
diff --git a/spring-security-modules/spring-5-security/src/main/java/com/baeldung/loginextrafieldssimple/SimpleUserDetailsService.java b/spring-security-modules/spring-security-web-login/src/main/java/com/baeldung/loginextrafieldssimple/SimpleUserDetailsService.java
similarity index 97%
rename from spring-security-modules/spring-5-security/src/main/java/com/baeldung/loginextrafieldssimple/SimpleUserDetailsService.java
rename to spring-security-modules/spring-security-web-login/src/main/java/com/baeldung/loginextrafieldssimple/SimpleUserDetailsService.java
index 2fad50ad01..25fc5c3572 100644
--- a/spring-security-modules/spring-5-security/src/main/java/com/baeldung/loginextrafieldssimple/SimpleUserDetailsService.java
+++ b/spring-security-modules/spring-security-web-login/src/main/java/com/baeldung/loginextrafieldssimple/SimpleUserDetailsService.java
@@ -1,32 +1,32 @@
-package com.baeldung.loginextrafieldssimple;
-
-import org.apache.commons.lang3.StringUtils;
-import org.springframework.security.core.userdetails.UserDetails;
-import org.springframework.security.core.userdetails.UserDetailsService;
-import org.springframework.security.core.userdetails.UsernameNotFoundException;
-import org.springframework.stereotype.Service;
-
-@Service("userDetailsService")
-public class SimpleUserDetailsService implements UserDetailsService {
-
- private UserRepository userRepository;
-
- public SimpleUserDetailsService(UserRepository userRepository) {
- this.userRepository = userRepository;
- }
-
- @Override
- public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
- String[] usernameAndDomain = StringUtils.split(username, String.valueOf(Character.LINE_SEPARATOR));
- if (usernameAndDomain == null || usernameAndDomain.length != 2) {
- throw new UsernameNotFoundException("Username and domain must be provided");
- }
- User user = userRepository.findUser(usernameAndDomain[0], usernameAndDomain[1]);
- if (user == null) {
- throw new UsernameNotFoundException(
- String.format("Username not found for domain, username=%s, domain=%s",
- usernameAndDomain[0], usernameAndDomain[1]));
- }
- return user;
- }
-}
+package com.baeldung.loginextrafieldssimple;
+
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.security.core.userdetails.UserDetails;
+import org.springframework.security.core.userdetails.UserDetailsService;
+import org.springframework.security.core.userdetails.UsernameNotFoundException;
+import org.springframework.stereotype.Service;
+
+@Service("userDetailsService")
+public class SimpleUserDetailsService implements UserDetailsService {
+
+ private UserRepository userRepository;
+
+ public SimpleUserDetailsService(UserRepository userRepository) {
+ this.userRepository = userRepository;
+ }
+
+ @Override
+ public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
+ String[] usernameAndDomain = StringUtils.split(username, String.valueOf(Character.LINE_SEPARATOR));
+ if (usernameAndDomain == null || usernameAndDomain.length != 2) {
+ throw new UsernameNotFoundException("Username and domain must be provided");
+ }
+ User user = userRepository.findUser(usernameAndDomain[0], usernameAndDomain[1]);
+ if (user == null) {
+ throw new UsernameNotFoundException(
+ String.format("Username not found for domain, username=%s, domain=%s",
+ usernameAndDomain[0], usernameAndDomain[1]));
+ }
+ return user;
+ }
+}
diff --git a/spring-security-modules/spring-5-security/src/main/java/com/baeldung/loginextrafieldssimple/SimpleUserRepository.java b/spring-security-modules/spring-security-web-login/src/main/java/com/baeldung/loginextrafieldssimple/SimpleUserRepository.java
similarity index 96%
rename from spring-security-modules/spring-5-security/src/main/java/com/baeldung/loginextrafieldssimple/SimpleUserRepository.java
rename to spring-security-modules/spring-security-web-login/src/main/java/com/baeldung/loginextrafieldssimple/SimpleUserRepository.java
index 44929c6189..4a597c7146 100644
--- a/spring-security-modules/spring-5-security/src/main/java/com/baeldung/loginextrafieldssimple/SimpleUserRepository.java
+++ b/spring-security-modules/spring-security-web-login/src/main/java/com/baeldung/loginextrafieldssimple/SimpleUserRepository.java
@@ -1,33 +1,33 @@
-package com.baeldung.loginextrafieldssimple;
-
-import java.util.ArrayList;
-import java.util.Collection;
-
-import org.apache.commons.lang3.StringUtils;
-import org.springframework.security.core.GrantedAuthority;
-import org.springframework.security.crypto.password.PasswordEncoder;
-import org.springframework.stereotype.Repository;
-
-@Repository("userRepository")
-public class SimpleUserRepository implements UserRepository {
-
- private PasswordEncoder passwordEncoder;
-
- public SimpleUserRepository(PasswordEncoder passwordEncoder) {
- this.passwordEncoder = passwordEncoder;
- }
-
- @Override
- public User findUser(String username, String domain) {
- if (StringUtils.isAnyBlank(username, domain)) {
- return null;
- } else {
- Collection extends GrantedAuthority> authorities = new ArrayList<>();
- User user = new User(username, domain,
- passwordEncoder.encode("secret"), true,
- true, true, true, authorities);
- return user;
- }
- }
-
-}
+package com.baeldung.loginextrafieldssimple;
+
+import java.util.ArrayList;
+import java.util.Collection;
+
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.security.core.GrantedAuthority;
+import org.springframework.security.crypto.password.PasswordEncoder;
+import org.springframework.stereotype.Repository;
+
+@Repository("userRepository")
+public class SimpleUserRepository implements UserRepository {
+
+ private PasswordEncoder passwordEncoder;
+
+ public SimpleUserRepository(PasswordEncoder passwordEncoder) {
+ this.passwordEncoder = passwordEncoder;
+ }
+
+ @Override
+ public User findUser(String username, String domain) {
+ if (StringUtils.isAnyBlank(username, domain)) {
+ return null;
+ } else {
+ Collection extends GrantedAuthority> authorities = new ArrayList<>();
+ User user = new User(username, domain,
+ passwordEncoder.encode("secret"), true,
+ true, true, true, authorities);
+ return user;
+ }
+ }
+
+}
diff --git a/spring-security-modules/spring-5-security/src/main/java/com/baeldung/loginextrafieldssimple/User.java b/spring-security-modules/spring-security-web-login/src/main/java/com/baeldung/loginextrafieldssimple/User.java
similarity index 97%
rename from spring-security-modules/spring-5-security/src/main/java/com/baeldung/loginextrafieldssimple/User.java
rename to spring-security-modules/spring-security-web-login/src/main/java/com/baeldung/loginextrafieldssimple/User.java
index b76da65638..b5c790d2bc 100644
--- a/spring-security-modules/spring-5-security/src/main/java/com/baeldung/loginextrafieldssimple/User.java
+++ b/spring-security-modules/spring-security-web-login/src/main/java/com/baeldung/loginextrafieldssimple/User.java
@@ -1,21 +1,21 @@
-package com.baeldung.loginextrafieldssimple;
-
-import java.util.Collection;
-
-import org.springframework.security.core.GrantedAuthority;
-
-public class User extends org.springframework.security.core.userdetails.User {
-
- private String domain;
-
- public User(String username, String domain, String password, boolean enabled,
- boolean accountNonExpired, boolean credentialsNonExpired,
- boolean accountNonLocked, Collection extends GrantedAuthority> authorities) {
- super(username, password, enabled, accountNonExpired, credentialsNonExpired, accountNonLocked, authorities);
- this.domain = domain;
- }
-
- public String getDomain() {
- return domain;
- }
-}
+package com.baeldung.loginextrafieldssimple;
+
+import java.util.Collection;
+
+import org.springframework.security.core.GrantedAuthority;
+
+public class User extends org.springframework.security.core.userdetails.User {
+
+ private String domain;
+
+ public User(String username, String domain, String password, boolean enabled,
+ boolean accountNonExpired, boolean credentialsNonExpired,
+ boolean accountNonLocked, Collection extends GrantedAuthority> authorities) {
+ super(username, password, enabled, accountNonExpired, credentialsNonExpired, accountNonLocked, authorities);
+ this.domain = domain;
+ }
+
+ public String getDomain() {
+ return domain;
+ }
+}
diff --git a/spring-security-modules/spring-5-security/src/main/java/com/baeldung/loginextrafieldssimple/UserRepository.java b/spring-security-modules/spring-security-web-login/src/main/java/com/baeldung/loginextrafieldssimple/UserRepository.java
similarity index 95%
rename from spring-security-modules/spring-5-security/src/main/java/com/baeldung/loginextrafieldssimple/UserRepository.java
rename to spring-security-modules/spring-security-web-login/src/main/java/com/baeldung/loginextrafieldssimple/UserRepository.java
index 919e611b9c..02dfe9779a 100644
--- a/spring-security-modules/spring-5-security/src/main/java/com/baeldung/loginextrafieldssimple/UserRepository.java
+++ b/spring-security-modules/spring-security-web-login/src/main/java/com/baeldung/loginextrafieldssimple/UserRepository.java
@@ -1,7 +1,7 @@
-package com.baeldung.loginextrafieldssimple;
-
-public interface UserRepository {
-
- public User findUser(String username, String domain);
-
-}
+package com.baeldung.loginextrafieldssimple;
+
+public interface UserRepository {
+
+ public User findUser(String username, String domain);
+
+}
diff --git a/spring-security-modules/spring-5-security/src/main/java/com/baeldung/loginextrafieldssimple/WebController.java b/spring-security-modules/spring-security-web-login/src/main/java/com/baeldung/loginextrafieldssimple/WebController.java
similarity index 96%
rename from spring-security-modules/spring-5-security/src/main/java/com/baeldung/loginextrafieldssimple/WebController.java
rename to spring-security-modules/spring-security-web-login/src/main/java/com/baeldung/loginextrafieldssimple/WebController.java
index 1b17de7bec..82add8f2e6 100644
--- a/spring-security-modules/spring-5-security/src/main/java/com/baeldung/loginextrafieldssimple/WebController.java
+++ b/spring-security-modules/spring-security-web-login/src/main/java/com/baeldung/loginextrafieldssimple/WebController.java
@@ -1,51 +1,51 @@
-package com.baeldung.loginextrafieldssimple;
-
-import java.util.Optional;
-
-import org.springframework.security.authentication.AnonymousAuthenticationToken;
-import org.springframework.security.core.Authentication;
-import org.springframework.security.core.context.SecurityContextHolder;
-import org.springframework.stereotype.Controller;
-import org.springframework.ui.Model;
-import org.springframework.web.bind.annotation.RequestMapping;
-
-@Controller
-public class WebController {
-
- @RequestMapping("/")
- public String root() {
- return "redirect:/index";
- }
-
- @RequestMapping("/index")
- public String index(Model model) {
- getDomain().ifPresent(d -> {
- model.addAttribute("domain", d);
- });
- return "index";
- }
-
- @RequestMapping("/user/index")
- public String userIndex(Model model) {
- getDomain().ifPresent(d -> {
- model.addAttribute("domain", d);
- });
- return "user/index";
- }
-
- @RequestMapping("/login")
- public String login() {
- return "login";
- }
-
- private Optional getDomain() {
- Authentication auth = SecurityContextHolder.getContext()
- .getAuthentication();
- String domain = null;
- if (auth != null && !auth.getClass().equals(AnonymousAuthenticationToken.class)) {
- User user = (User) auth.getPrincipal();
- domain = user.getDomain();
- }
- return Optional.ofNullable(domain);
- }
-}
+package com.baeldung.loginextrafieldssimple;
+
+import java.util.Optional;
+
+import org.springframework.security.authentication.AnonymousAuthenticationToken;
+import org.springframework.security.core.Authentication;
+import org.springframework.security.core.context.SecurityContextHolder;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.Model;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+@Controller
+public class WebController {
+
+ @RequestMapping("/")
+ public String root() {
+ return "redirect:/index";
+ }
+
+ @RequestMapping("/index")
+ public String index(Model model) {
+ getDomain().ifPresent(d -> {
+ model.addAttribute("domain", d);
+ });
+ return "index";
+ }
+
+ @RequestMapping("/user/index")
+ public String userIndex(Model model) {
+ getDomain().ifPresent(d -> {
+ model.addAttribute("domain", d);
+ });
+ return "user/index";
+ }
+
+ @RequestMapping("/login")
+ public String login() {
+ return "login";
+ }
+
+ private Optional getDomain() {
+ Authentication auth = SecurityContextHolder.getContext()
+ .getAuthentication();
+ String domain = null;
+ if (auth != null && !auth.getClass().equals(AnonymousAuthenticationToken.class)) {
+ User user = (User) auth.getPrincipal();
+ domain = user.getDomain();
+ }
+ return Optional.ofNullable(domain);
+ }
+}
diff --git a/spring-security-modules/spring-5-security/src/main/resources/application-extrafields.properties b/spring-security-modules/spring-security-web-login/src/main/resources/application-extrafields.properties
similarity index 100%
rename from spring-security-modules/spring-5-security/src/main/resources/application-extrafields.properties
rename to spring-security-modules/spring-security-web-login/src/main/resources/application-extrafields.properties
diff --git a/spring-security-modules/spring-security-web-login/src/main/resources/application.properties b/spring-security-modules/spring-security-web-login/src/main/resources/application.properties
new file mode 100644
index 0000000000..8159ace060
--- /dev/null
+++ b/spring-security-modules/spring-security-web-login/src/main/resources/application.properties
@@ -0,0 +1,7 @@
+server.port=8081
+
+logging.level.root=INFO
+
+logging.level.com.baeldung.dsl.ClientErrorLoggingFilter=DEBUG
+
+logging.level.org.springframework.security=DEBUG
\ No newline at end of file
diff --git a/spring-security-modules/spring-5-security/src/main/resources/static/css/main.css b/spring-security-modules/spring-security-web-login/src/main/resources/static/css/main.css
similarity index 100%
rename from spring-security-modules/spring-5-security/src/main/resources/static/css/main.css
rename to spring-security-modules/spring-security-web-login/src/main/resources/static/css/main.css
diff --git a/spring-security-modules/spring-5-security/src/main/resources/templatesextrafields/index.html b/spring-security-modules/spring-security-web-login/src/main/resources/templatesextrafields/index.html
similarity index 100%
rename from spring-security-modules/spring-5-security/src/main/resources/templatesextrafields/index.html
rename to spring-security-modules/spring-security-web-login/src/main/resources/templatesextrafields/index.html
diff --git a/spring-security-modules/spring-5-security/src/main/resources/templatesextrafields/login.html b/spring-security-modules/spring-security-web-login/src/main/resources/templatesextrafields/login.html
similarity index 100%
rename from spring-security-modules/spring-5-security/src/main/resources/templatesextrafields/login.html
rename to spring-security-modules/spring-security-web-login/src/main/resources/templatesextrafields/login.html
diff --git a/spring-security-modules/spring-5-security/src/main/resources/templatesextrafields/user/index.html b/spring-security-modules/spring-security-web-login/src/main/resources/templatesextrafields/user/index.html
similarity index 100%
rename from spring-security-modules/spring-5-security/src/main/resources/templatesextrafields/user/index.html
rename to spring-security-modules/spring-security-web-login/src/main/resources/templatesextrafields/user/index.html
diff --git a/spring-security-modules/spring-5-security/src/test/java/com/baeldung/loginextrafields/AbstractExtraLoginFieldsIntegrationTest.java b/spring-security-modules/spring-security-web-login/src/test/java/com/baeldung/loginextrafields/AbstractExtraLoginFieldsIntegrationTest.java
similarity index 97%
rename from spring-security-modules/spring-5-security/src/test/java/com/baeldung/loginextrafields/AbstractExtraLoginFieldsIntegrationTest.java
rename to spring-security-modules/spring-security-web-login/src/test/java/com/baeldung/loginextrafields/AbstractExtraLoginFieldsIntegrationTest.java
index c46cbd8113..f8b1097b7a 100644
--- a/spring-security-modules/spring-5-security/src/test/java/com/baeldung/loginextrafields/AbstractExtraLoginFieldsIntegrationTest.java
+++ b/spring-security-modules/spring-security-web-login/src/test/java/com/baeldung/loginextrafields/AbstractExtraLoginFieldsIntegrationTest.java
@@ -1,46 +1,46 @@
-package com.baeldung.loginextrafields;
-
-import static org.springframework.security.test.web.servlet.setup.SecurityMockMvcConfigurers.springSecurity;
-import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
-import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.redirectedUrlPattern;
-import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.security.web.FilterChainProxy;
-import org.springframework.test.web.servlet.MockMvc;
-import org.springframework.test.web.servlet.setup.MockMvcBuilders;
-import org.springframework.web.context.WebApplicationContext;
-
-public abstract class AbstractExtraLoginFieldsIntegrationTest {
-
- @Autowired
- private FilterChainProxy springSecurityFilterChain;
-
- @Autowired
- private WebApplicationContext wac;
-
- protected MockMvc mockMvc;
-
- @Before
- public void setup() {
- this.mockMvc = MockMvcBuilders.webAppContextSetup(wac)
- .apply(springSecurity(springSecurityFilterChain))
- .build();
- }
-
- @Test
- public void givenRootPathAccess_thenRedirectToIndex() throws Exception {
- this.mockMvc.perform(get("/"))
- .andExpect(status().is3xxRedirection())
- .andExpect(redirectedUrlPattern("/index*"));
- }
-
- @Test
- public void givenSecuredResource_whenAccessUnauthenticated_thenRequiresAuthentication() throws Exception {
- this.mockMvc.perform(get("/user/index"))
- .andExpect(status().is3xxRedirection())
- .andExpect(redirectedUrlPattern("**/login"));
- }
-}
+package com.baeldung.loginextrafields;
+
+import static org.springframework.security.test.web.servlet.setup.SecurityMockMvcConfigurers.springSecurity;
+import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
+import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.redirectedUrlPattern;
+import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.web.FilterChainProxy;
+import org.springframework.test.web.servlet.MockMvc;
+import org.springframework.test.web.servlet.setup.MockMvcBuilders;
+import org.springframework.web.context.WebApplicationContext;
+
+public abstract class AbstractExtraLoginFieldsIntegrationTest {
+
+ @Autowired
+ private FilterChainProxy springSecurityFilterChain;
+
+ @Autowired
+ private WebApplicationContext wac;
+
+ protected MockMvc mockMvc;
+
+ @Before
+ public void setup() {
+ this.mockMvc = MockMvcBuilders.webAppContextSetup(wac)
+ .apply(springSecurity(springSecurityFilterChain))
+ .build();
+ }
+
+ @Test
+ public void givenRootPathAccess_thenRedirectToIndex() throws Exception {
+ this.mockMvc.perform(get("/"))
+ .andExpect(status().is3xxRedirection())
+ .andExpect(redirectedUrlPattern("/index*"));
+ }
+
+ @Test
+ public void givenSecuredResource_whenAccessUnauthenticated_thenRequiresAuthentication() throws Exception {
+ this.mockMvc.perform(get("/user/index"))
+ .andExpect(status().is3xxRedirection())
+ .andExpect(redirectedUrlPattern("**/login"));
+ }
+}
diff --git a/spring-security-modules/spring-5-security/src/test/java/com/baeldung/loginextrafields/LoginFieldsFullIntegrationTest.java b/spring-security-modules/spring-security-web-login/src/test/java/com/baeldung/loginextrafields/LoginFieldsFullIntegrationTest.java
similarity index 97%
rename from spring-security-modules/spring-5-security/src/test/java/com/baeldung/loginextrafields/LoginFieldsFullIntegrationTest.java
rename to spring-security-modules/spring-security-web-login/src/test/java/com/baeldung/loginextrafields/LoginFieldsFullIntegrationTest.java
index 54aece3b03..63c4e98505 100644
--- a/spring-security-modules/spring-5-security/src/test/java/com/baeldung/loginextrafields/LoginFieldsFullIntegrationTest.java
+++ b/spring-security-modules/spring-security-web-login/src/test/java/com/baeldung/loginextrafields/LoginFieldsFullIntegrationTest.java
@@ -1,72 +1,72 @@
-package com.baeldung.loginextrafields;
-
-import static org.junit.Assert.assertEquals;
-import static org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors.csrf;
-import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
-import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
-import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.redirectedUrlPattern;
-import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
-
-import java.util.ArrayList;
-import java.util.Collection;
-
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.springframework.boot.test.context.SpringBootTest;
-import org.springframework.mock.web.MockHttpSession;
-import org.springframework.security.core.Authentication;
-import org.springframework.security.core.GrantedAuthority;
-import org.springframework.security.core.context.SecurityContext;
-import org.springframework.security.web.context.HttpSessionSecurityContextRepository;
-import org.springframework.test.context.junit.jupiter.web.SpringJUnitWebConfig;
-import org.springframework.test.context.junit4.SpringRunner;
-import org.springframework.test.web.servlet.MvcResult;
-import org.springframework.test.web.servlet.request.MockHttpServletRequestBuilder;
-
-import com.baeldung.loginextrafieldscustom.ExtraLoginFieldsApplication;
-import com.baeldung.loginextrafieldscustom.User;
-
-@RunWith(SpringRunner.class)
-@SpringJUnitWebConfig
-@SpringBootTest(classes = ExtraLoginFieldsApplication.class)
-public class LoginFieldsFullIntegrationTest extends AbstractExtraLoginFieldsIntegrationTest {
-
- @Test
- public void givenAccessSecuredResource_whenAuthenticated_thenAuthHasExtraFields() throws Exception {
- MockHttpServletRequestBuilder securedResourceAccess = get("/user/index");
- MvcResult unauthenticatedResult = mockMvc.perform(securedResourceAccess)
- .andExpect(status().is3xxRedirection())
- .andReturn();
-
- MockHttpSession session = (MockHttpSession) unauthenticatedResult.getRequest()
- .getSession();
- String loginUrl = unauthenticatedResult.getResponse()
- .getRedirectedUrl();
-
- User user = getUser();
-
- mockMvc.perform(post(loginUrl)
- .param("username", user.getUsername())
- .param("password", user.getPassword())
- .param("domain", user.getDomain())
- .session(session)
- .with(csrf()))
- .andExpect(status().is3xxRedirection())
- .andExpect(redirectedUrlPattern("**/user/index"))
- .andReturn();
-
- mockMvc.perform(securedResourceAccess.session(session))
- .andExpect(status().isOk());
-
- SecurityContext securityContext
- = (SecurityContext) session.getAttribute(HttpSessionSecurityContextRepository.SPRING_SECURITY_CONTEXT_KEY);
- Authentication auth = securityContext.getAuthentication();
- assertEquals(((User)auth.getPrincipal()).getDomain(), user.getDomain());
- }
-
- private User getUser() {
- Collection extends GrantedAuthority> authorities = new ArrayList<>();
- return new User("myusername", "mydomain", "secret", true, true, true, true, authorities);
- }
-
-}
+package com.baeldung.loginextrafields;
+
+import static org.junit.Assert.assertEquals;
+import static org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors.csrf;
+import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
+import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
+import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.redirectedUrlPattern;
+import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
+
+import java.util.ArrayList;
+import java.util.Collection;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.mock.web.MockHttpSession;
+import org.springframework.security.core.Authentication;
+import org.springframework.security.core.GrantedAuthority;
+import org.springframework.security.core.context.SecurityContext;
+import org.springframework.security.web.context.HttpSessionSecurityContextRepository;
+import org.springframework.test.context.junit.jupiter.web.SpringJUnitWebConfig;
+import org.springframework.test.context.junit4.SpringRunner;
+import org.springframework.test.web.servlet.MvcResult;
+import org.springframework.test.web.servlet.request.MockHttpServletRequestBuilder;
+
+import com.baeldung.loginextrafieldscustom.ExtraLoginFieldsApplication;
+import com.baeldung.loginextrafieldscustom.User;
+
+@RunWith(SpringRunner.class)
+@SpringJUnitWebConfig
+@SpringBootTest(classes = ExtraLoginFieldsApplication.class)
+public class LoginFieldsFullIntegrationTest extends AbstractExtraLoginFieldsIntegrationTest {
+
+ @Test
+ public void givenAccessSecuredResource_whenAuthenticated_thenAuthHasExtraFields() throws Exception {
+ MockHttpServletRequestBuilder securedResourceAccess = get("/user/index");
+ MvcResult unauthenticatedResult = mockMvc.perform(securedResourceAccess)
+ .andExpect(status().is3xxRedirection())
+ .andReturn();
+
+ MockHttpSession session = (MockHttpSession) unauthenticatedResult.getRequest()
+ .getSession();
+ String loginUrl = unauthenticatedResult.getResponse()
+ .getRedirectedUrl();
+
+ User user = getUser();
+
+ mockMvc.perform(post(loginUrl)
+ .param("username", user.getUsername())
+ .param("password", user.getPassword())
+ .param("domain", user.getDomain())
+ .session(session)
+ .with(csrf()))
+ .andExpect(status().is3xxRedirection())
+ .andExpect(redirectedUrlPattern("**/user/index"))
+ .andReturn();
+
+ mockMvc.perform(securedResourceAccess.session(session))
+ .andExpect(status().isOk());
+
+ SecurityContext securityContext
+ = (SecurityContext) session.getAttribute(HttpSessionSecurityContextRepository.SPRING_SECURITY_CONTEXT_KEY);
+ Authentication auth = securityContext.getAuthentication();
+ assertEquals(((User)auth.getPrincipal()).getDomain(), user.getDomain());
+ }
+
+ private User getUser() {
+ Collection extends GrantedAuthority> authorities = new ArrayList<>();
+ return new User("myusername", "mydomain", "secret", true, true, true, true, authorities);
+ }
+
+}
diff --git a/spring-security-modules/spring-5-security/src/test/java/com/baeldung/loginextrafields/LoginFieldsSimpleIntegrationTest.java b/spring-security-modules/spring-security-web-login/src/test/java/com/baeldung/loginextrafields/LoginFieldsSimpleIntegrationTest.java
similarity index 97%
rename from spring-security-modules/spring-5-security/src/test/java/com/baeldung/loginextrafields/LoginFieldsSimpleIntegrationTest.java
rename to spring-security-modules/spring-security-web-login/src/test/java/com/baeldung/loginextrafields/LoginFieldsSimpleIntegrationTest.java
index 63167b04fa..2348afeb84 100644
--- a/spring-security-modules/spring-5-security/src/test/java/com/baeldung/loginextrafields/LoginFieldsSimpleIntegrationTest.java
+++ b/spring-security-modules/spring-security-web-login/src/test/java/com/baeldung/loginextrafields/LoginFieldsSimpleIntegrationTest.java
@@ -1,72 +1,72 @@
-package com.baeldung.loginextrafields;
-
-import static org.junit.Assert.assertEquals;
-import static org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors.csrf;
-import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
-import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
-import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.redirectedUrlPattern;
-import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
-
-import java.util.ArrayList;
-import java.util.Collection;
-
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.springframework.boot.test.context.SpringBootTest;
-import org.springframework.mock.web.MockHttpSession;
-import org.springframework.security.core.Authentication;
-import org.springframework.security.core.GrantedAuthority;
-import org.springframework.security.core.context.SecurityContext;
-import org.springframework.security.web.context.HttpSessionSecurityContextRepository;
-import org.springframework.test.context.junit.jupiter.web.SpringJUnitWebConfig;
-import org.springframework.test.context.junit4.SpringRunner;
-import org.springframework.test.web.servlet.MvcResult;
-import org.springframework.test.web.servlet.request.MockHttpServletRequestBuilder;
-
-import com.baeldung.loginextrafieldssimple.ExtraLoginFieldsApplication;
-import com.baeldung.loginextrafieldssimple.User;
-
-@RunWith(SpringRunner.class)
-@SpringJUnitWebConfig
-@SpringBootTest(classes = ExtraLoginFieldsApplication.class)
-public class LoginFieldsSimpleIntegrationTest extends AbstractExtraLoginFieldsIntegrationTest {
-
- @Test
- public void givenAccessSecuredResource_whenAuthenticated_thenAuthHasExtraFields() throws Exception {
- MockHttpServletRequestBuilder securedResourceAccess = get("/user/index");
- MvcResult unauthenticatedResult = mockMvc.perform(securedResourceAccess)
- .andExpect(status().is3xxRedirection())
- .andReturn();
-
- MockHttpSession session = (MockHttpSession) unauthenticatedResult.getRequest()
- .getSession();
- String loginUrl = unauthenticatedResult.getResponse()
- .getRedirectedUrl();
-
- User user = getUser();
-
- mockMvc.perform(post(loginUrl)
- .param("username", user.getUsername())
- .param("password", user.getPassword())
- .param("domain", user.getDomain())
- .session(session)
- .with(csrf()))
- .andExpect(status().is3xxRedirection())
- .andExpect(redirectedUrlPattern("**/user/index"))
- .andReturn();
-
- mockMvc.perform(securedResourceAccess.session(session))
- .andExpect(status().isOk());
-
- SecurityContext securityContext
- = (SecurityContext) session.getAttribute(HttpSessionSecurityContextRepository.SPRING_SECURITY_CONTEXT_KEY);
- Authentication auth = securityContext.getAuthentication();
- assertEquals(((User)auth.getPrincipal()).getDomain(), user.getDomain());
- }
-
- private User getUser() {
- Collection extends GrantedAuthority> authorities = new ArrayList<>();
- return new User("myusername", "mydomain", "secret", true, true, true, true, authorities);
- }
-
-}
+package com.baeldung.loginextrafields;
+
+import static org.junit.Assert.assertEquals;
+import static org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors.csrf;
+import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
+import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
+import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.redirectedUrlPattern;
+import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
+
+import java.util.ArrayList;
+import java.util.Collection;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.mock.web.MockHttpSession;
+import org.springframework.security.core.Authentication;
+import org.springframework.security.core.GrantedAuthority;
+import org.springframework.security.core.context.SecurityContext;
+import org.springframework.security.web.context.HttpSessionSecurityContextRepository;
+import org.springframework.test.context.junit.jupiter.web.SpringJUnitWebConfig;
+import org.springframework.test.context.junit4.SpringRunner;
+import org.springframework.test.web.servlet.MvcResult;
+import org.springframework.test.web.servlet.request.MockHttpServletRequestBuilder;
+
+import com.baeldung.loginextrafieldssimple.ExtraLoginFieldsApplication;
+import com.baeldung.loginextrafieldssimple.User;
+
+@RunWith(SpringRunner.class)
+@SpringJUnitWebConfig
+@SpringBootTest(classes = ExtraLoginFieldsApplication.class)
+public class LoginFieldsSimpleIntegrationTest extends AbstractExtraLoginFieldsIntegrationTest {
+
+ @Test
+ public void givenAccessSecuredResource_whenAuthenticated_thenAuthHasExtraFields() throws Exception {
+ MockHttpServletRequestBuilder securedResourceAccess = get("/user/index");
+ MvcResult unauthenticatedResult = mockMvc.perform(securedResourceAccess)
+ .andExpect(status().is3xxRedirection())
+ .andReturn();
+
+ MockHttpSession session = (MockHttpSession) unauthenticatedResult.getRequest()
+ .getSession();
+ String loginUrl = unauthenticatedResult.getResponse()
+ .getRedirectedUrl();
+
+ User user = getUser();
+
+ mockMvc.perform(post(loginUrl)
+ .param("username", user.getUsername())
+ .param("password", user.getPassword())
+ .param("domain", user.getDomain())
+ .session(session)
+ .with(csrf()))
+ .andExpect(status().is3xxRedirection())
+ .andExpect(redirectedUrlPattern("**/user/index"))
+ .andReturn();
+
+ mockMvc.perform(securedResourceAccess.session(session))
+ .andExpect(status().isOk());
+
+ SecurityContext securityContext
+ = (SecurityContext) session.getAttribute(HttpSessionSecurityContextRepository.SPRING_SECURITY_CONTEXT_KEY);
+ Authentication auth = securityContext.getAuthentication();
+ assertEquals(((User)auth.getPrincipal()).getDomain(), user.getDomain());
+ }
+
+ private User getUser() {
+ Collection extends GrantedAuthority> authorities = new ArrayList<>();
+ return new User("myusername", "mydomain", "secret", true, true, true, true, authorities);
+ }
+
+}