Возвращение руководителей Широ

ПРИМЕЧАНИЕ. В связи с последующими исследованиями этот вопрос был полностью реструктурирован.

Я пытаюсь получить значения из темы Широ PrincipalCollection. Я добавил в коллекцию два принципала. Username и UUID. Когда я пытаюсь вспомнить их, я получаю SimplePrincipalCollection размера = 1, а это, в свою очередь, имеет принципы как LinkedHashMap размера = 2.

Вопрос в том, как я могу получить принципы напрямую?


person tarka    schedule 20.07.2012    source источник
comment
Можете ли вы поделиться кодом, демонстрирующим, что вы пытаетесь сделать? В интерфейсе PrincipalCollection есть несколько методов, которые разрешают доступ к отдельным участникам. Они не делают то, что вы хотите?   -  person jbunting    schedule 20.07.2012


Ответы (1)


Для этой цели нет необходимости добавлять два дополнительных принципа. Вы можете создать простой объект (POJO), содержащий всю необходимую информацию, и использовать его как единственный принцип.

public class MyRealm extends JdbcRealm {

...
enter code here


@Override
protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {

    SimpleAuthenticationInfo info = null;
    try {
        //GET USER INFO FROM DB etc. here
        MyPrinciple USER_OBJECT = new MyPrinciple();
        USER_OBJECT.setId(UUID);
        USER_OBJECT.setUsername(username);
        info = new SimpleAuthenticationInfo(USER_OBJECT, password.toCharArray(), getName());

    } catch (IOException | SQLException e) {
        logger.error(message, e);
        throw new AuthenticationException(message, e);
    }

    return info;
}

Затем, когда вам нужна информация о вошедшем в систему пользователе, вы можете просто вызвать getPrinciple() и использовать его методы получения после приведения его к вашему пользовательскому классу (POJO):

MyPrinciple LoggedInUser = (MyPrinciple ) SecurityUtils.getSubject().getPrinciple();
long uid = LoggedInUser.getId();
String username = LoggedInUser.getUsername();
person salihcenap    schedule 28.06.2013
comment
Есть ли встроенный интерфейс, который должен реализовать MyPrinciple? - person user2573153; 15.09.2014
comment
Нет! Это может быть любой POJO. - person salihcenap; 21.09.2014