Nous utilisons Jetspeed dans un projet et exigeons que jetspeed s'authentifie auprès d'un service de repos tiers qui accepte le nom d'utilisateur et le mot de passe et renvoie l'objet utilisateur. Le moyen le plus simple et le plus simple que j'ai trouvé d'implémenter ceci sans trop utiliser jetspeed était d'écrire un AuthenticationProvider personnalisé étendant la classe DefaultAuthenticationProvider et remplaçant la méthode de connexion. Après avoir authentifié l'utilisateur, je récupère les détails de l'utilisateur y compris les rôles, email, etc. Maintenant, si l'utilisateur existe déjà dans la base de données jetspeed, je synchronise ses rôles, sinon je crée l'utilisateur et lui assigner les rôles retournés par le service à distance.Comment puis-je définir les informations utilisateur dans jetspeed?
Maintenant, je veux un moyen de définir les propriétés user.email, user.firstname et user.lastname aussi, de sorte qu'il est accessible en utilisant $ jetspeed.getUserAttribute dans les fichiers psml. Toute idée comment pouvons-nous faire cela?
Voici mon code [découper des choses inutiles] -
public class CustomAuthenticationProvider extends BaseAuthenticationProvider {
....
public AuthenticatedUser authenticate(String userName, String password) throws SecurityException {
try {
//Login the user
UserSessionDTO customSession = Security.login(userName, password);
//Fetch the user details
UserDTO customUser = customSession.getUser();
//Get the user roles
List<UserRoleDTO> roles = customUser.getUserRoleDTOList();
//Verify/create the user in jetspeed user database
UserImpl user = null;
if (!um.userExists(customUser.getLoginId())) {
user = (UserImpl) um.addUser(customUser.getLoginId(), true);
//Standard data
user.setMapped(true);
user.setEnabled(true);
} else {
user = (UserImpl) um.getUser(customUser.getLoginId());
}
//Sync the portal user roles with the CMGI user roles
List<Role> portalRoles = rm.getRolesForUser(customUser.getLoginId());
for (Role portalRole : portalRoles) {
Boolean found = Boolean.FALSE;
for (UserRoleDTO role : roles) {
if (role.getRoleName().equalsIgnoreCase(portalRole.getName())) {
found = Boolean.TRUE;
break;
}
}
if(!found){
rm.removeRoleFromUser(userName, portalRole.getName());
}
}
for(UserRoleDTO role : roles){
rm.addRoleToUser(userName, role.getRoleName());
}
PasswordCredential pwc = new PasswordCredentialImpl(user, password);
UserCredentialImpl uc = new UserCredentialImpl(pwc);
AuthenticatedUserImpl authUser = new AuthenticatedUserImpl(user, uc);
return authUser;
}
.... }}