2011-01-03 18 views
0

私たちはプロジェクトでJetspeedを使用しており、jetspeedはユーザー名とパスワードを受け入れてユーザーオブジェクトを返すサードパーティのレストサービスに対して認証する必要があります。jetspeedでユーザー情報を設定するにはどうすればよいですか?

jetspeedに影響を与えずにこれを実装すると、もっとも単純で簡単な方法で、DefaultAuthenticationProviderクラスを拡張してloginメソッドをオーバーライドするカスタムAuthenticationProviderを記述することができました。

私は、ロール、電子メールなどを含むユーザーの詳細を取得します。ユーザーが既にjetspeedデータベースに存在する場合は、自分の役割を同期します。そうでなければ、ユーザーを作成し、リモートサービス。

は今、私はそれは、PSMLファイル内の$ jetspeed.getUserAttributeを使用してアクセスできるように、あまりにもuser.email、user.firstnameとuser.lastnameプロパティを設定する方法をしたいです。どんなアイデアをすればいいのですか?ここで

は私のコードは[不要なものを切り取っ]である -

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; 


     } 

.... } }

答えて

0

あなたは、ユーザーがJetspeedのユーザー豆「org.apacheにカスタム属性を追加することができます。 jetspeed.security.JetspeedPrincipalType.user "security-managers.xmlにあります。

これらの属性は、この 例えば

 <bean class="org.apache.jetspeed.security.impl.SecurityAttributeTypeImpl"> 
      <constructor-arg index="0" value="user.lastname" /> 
      <constructor-arg index="1" value="info" /> 
     </bean> 
のように定義されるべきです
関連する問題