Как я могу установить информацию о пользователе в jetspeed? - PullRequest
0 голосов
/ 03 января 2011

Мы используем Jetspeed в проекте, и у нас есть требование, чтобы jetspeed проходил аутентификацию на сторонней службе отдыха, которая принимает имя пользователя и пароль и возвращает объект пользователя.

Самый простой и простой способ, который я нашелРеализация этого без слишком большого влияния jetspeed заключалась в том, чтобы написать собственный AuthenticationProvider, расширяющий класс DefaultAuthenticationProvider и переопределяющий метод входа в систему.

После аутентификации пользователя я возвращаю данные пользователя, включая роли, электронную почту и т. д.пользователь уже существует в базе данных jetspeed, я синхронизирую его роли, в противном случае я создаю пользователя и назначаю ему роли, возвращенные удаленным сервисом.

Теперь я хочу указать способ user.email, user.firstnameи свойства user.lastname, чтобы он был доступен с помощью $ jetspeed.getUserAttribute в файлах psml.Любая идея, как мы можем это сделать?

Вот мой код [вырезать ненужные вещи] -

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;


        } 

....}}

1 Ответ

0 голосов
/ 11 января 2011

Вы можете добавить пользовательские атрибуты пользователя в пользовательский компонент Jetspeed "org.apache.jetspeed.security.JetspeedPrincipalType.user", расположенный в security-manager.xml.

Эти атрибуты должны быть определены следующим образом * например 1003 *

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