Skip to content
Snippets Groups Projects
Commit 62f063e5 authored by Nicholas Blair's avatar Nicholas Blair
Browse files

refactor: switch autowiring to constructor injection

UdsPersonUserDetailsServiceImpl is not initialized automatically by either of the primary 'local-users' or 'preauth' Profiles. It's typically constructed by downstream projects manually (not by component scanning).

Registering more than 1 UserDetailsService - say one for the uw-spring-security stack, and a different one for UdsPersonUserDetailsServiceImpl - will result in ApplicationContext initializationerrors as the Configuration classes provided in uw-spring-security-config expect 1 and only 1 UserDetailsService.

The recommended use now for UdsPersonUserDetailsServiceImpl is to provide the needed UserDetailsService by hand, not by automatic autowiring. If the 1 UserDetailsService provided by uw-spring-security is appropriate, it's easy to retrieve from the ApplicationContext; if an alternate one is required it can be constructed without registering it as a @Bean.
parent 71358aec
No related branches found
No related tags found
1 merge request!25refactor: change injection strategy for UdsPersonUserDetailsServiceImpl
......@@ -25,9 +25,18 @@ import edu.wisc.uwss.UWUserDetails;
*/
public class UdsPersonUserDetailsServiceImpl implements UserDetailsService{
@Autowired UdsPersonService personService;
@Autowired(required=false) IdentifiersFactory identifiersFactory = new IdentifiersFactory.NetID();
protected UdsPersonService personService;
protected IdentifiersFactory identifiersFactory = new IdentifiersFactory.NetID();
@Autowired
public UdsPersonUserDetailsServiceImpl(UdsPersonService personService) {
this(personService, new IdentifiersFactory.NetID());
}
@Autowired(required=false)
public UdsPersonUserDetailsServiceImpl(UdsPersonService personService, IdentifiersFactory identifiersFactory) {
this.personService = personService;
this.identifiersFactory = identifiersFactory;
}
@Override
public UWUserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
Identifiers identifiers = identifiersFactory.withValue(username);
......
......@@ -83,4 +83,9 @@ public class UWUserDetailsImplTest {
assertEquals(lower.getEmailAddress(), upper.getEmailAddress());
assertEquals(lower.getEmailAddressHash(), upper.getEmailAddressHash());
}
@Test
public void newInstance_success() {
UWUserDetailsImpl instance = UWUserDetailsImpl.newInstance("UW123A123", "bucky", "", "Bucky Badger", "bucky.badger@wisc.edu", Collections.<String>emptyList(), Collections.<String>emptyList());
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment