私たちはプロジェクトで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;
}
.... } }