2011-01-03 4 views
0

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; 


     } 

.... }}

Répondre

0

Vous pouvez ajouter des attributs d'utilisateur personnalisé dans le haricot utilisateur Jetspeed « org.apache. jetspeed.security.JetspeedPrincipalType.user "situé dans security-managers.xml.

Ces attributs doivent être définis comme celui-ci par exemple

 <bean class="org.apache.jetspeed.security.impl.SecurityAttributeTypeImpl"> 
      <constructor-arg index="0" value="user.lastname" /> 
      <constructor-arg index="1" value="info" /> 
     </bean> 

Questions connexes