added UserDetailsService example
parent
579954f966
commit
e5720b9ce9
|
@ -98,6 +98,95 @@ The Authentication Filter uses the *oidcServerConfigs* property, a map of OIDC s
|
||||||
|
|
||||||
Again, you will need to implement your own UserDetailsService and configure as the above does with the reference to *myUserDetailsService*.
|
Again, you will need to implement your own UserDetailsService and configure as the above does with the reference to *myUserDetailsService*.
|
||||||
|
|
||||||
|
## Implementing your own UserDetailsService
|
||||||
|
|
||||||
|
An example UserDetailsService for the Rave Portal follows:
|
||||||
|
|
||||||
|
package org.mitre.mpn.service.impl;
|
||||||
|
|
||||||
|
import org.apache.rave.portal.model.NewUser;
|
||||||
|
import org.apache.rave.portal.model.User;
|
||||||
|
import org.apache.rave.portal.service.NewAccountService;
|
||||||
|
import org.apache.rave.portal.service.UserService;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.security.core.userdetails.AuthenticationUserDetailsService;
|
||||||
|
import org.springframework.security.core.userdetails.UserDetails;
|
||||||
|
import org.springframework.security.core.userdetails.UserDetailsService;
|
||||||
|
import org.springframework.security.core.userdetails.UsernameNotFoundException;
|
||||||
|
|
||||||
|
import org.mitre.openid.connect.client.OpenIdConnectAuthenticationToken;
|
||||||
|
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
@Service(value = "myUserDetailsService")
|
||||||
|
public class MyUserDetailsService implements UserDetailsService,
|
||||||
|
AuthenticationUserDetailsService<OpenIdConnectAuthenticationToken> {
|
||||||
|
|
||||||
|
private static final Logger log = LoggerFactory.getLogger(MpnUserDetailsService.class);
|
||||||
|
|
||||||
|
private final UserService userService;
|
||||||
|
private final NewAccountService newAccountService;
|
||||||
|
|
||||||
|
//TODO: This is temporarily hard-coded while we wait for the concept of Page Templates to be implemented in Rave
|
||||||
|
private static final String DEFAULT_LAYOUT_CODE = "columns_3";
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
public MyUserDetailsService(UserService userService, NewAccountService newAccountService) {
|
||||||
|
this.userService = userService;
|
||||||
|
this.newAccountService = newAccountService;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see org.springframework.security.core.userdetails.UserDetailsService#loadUserByUsername(java.lang.String)
|
||||||
|
*/
|
||||||
|
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
|
||||||
|
|
||||||
|
log.debug("loadUserByUsername called with: {}", username);
|
||||||
|
|
||||||
|
User user = userService.getUserByUsername(username);
|
||||||
|
|
||||||
|
if (user == null) {
|
||||||
|
throw new UsernameNotFoundException("User with username '" + username + "' was not found!");
|
||||||
|
}
|
||||||
|
|
||||||
|
return user;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see org.springframework.security.core.userdetails.AuthenticationUserDetailsService#loadUserDetails(org.springframework.security.core.Authentication)
|
||||||
|
*/
|
||||||
|
public UserDetails loadUserDetails(OpenIdConnectAuthenticationToken token) throws UsernameNotFoundException {
|
||||||
|
log.debug("loadUserDetails called with: {}", token);
|
||||||
|
|
||||||
|
User user = userService.getUserByUsername(token.getUserId());
|
||||||
|
|
||||||
|
if (user == null) {
|
||||||
|
|
||||||
|
NewUser newUser = new NewUser();
|
||||||
|
newUser.setUsername(token.getUserId());
|
||||||
|
newUser.setEmail(token.getUserId() + "@example.com");
|
||||||
|
newUser.setPageLayout(DEFAULT_LAYOUT_CODE);
|
||||||
|
newUser.setPassword(UUID.randomUUID().toString());
|
||||||
|
|
||||||
|
try {
|
||||||
|
newAccountService.createNewAccount(newUser);
|
||||||
|
} catch (Exception e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
|
||||||
|
user = userService.getUserByUsername(token.getName());
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return user;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
[OpenID Connect Standard]: http://openid.net/specs/openid-connect-standard-1_0.html "OpenID Connect Standard 1.0"
|
[OpenID Connect Standard]: http://openid.net/specs/openid-connect-standard-1_0.html "OpenID Connect Standard 1.0"
|
||||||
[OpenID Connect Standard]: http://openid.net/specs/openid-connect-standard-1_0.html#code_flow "Authorization Code Flow, OpenID Connect Standard"
|
[OpenID Connect Standard]: http://openid.net/specs/openid-connect-standard-1_0.html#code_flow "Authorization Code Flow, OpenID Connect Standard"
|
||||||
[Issuer Identifier]: http://openid.net/specs/openid-connect-messages-1_0.html#issuer_identifier "Issuer Identifier"
|
[Issuer Identifier]: http://openid.net/specs/openid-connect-messages-1_0.html#issuer_identifier "Issuer Identifier"
|
||||||
|
|
Loading…
Reference in New Issue