2014-09-03 2 views
0

У меня есть быстрый вопрос относительно Spring Security и получения дополнительной информации (переменные экземпляра) для текущего входа в систему User. По умолчанию, без необходимости писать свой собственный UserDetailsService Есть ли способ получить любую из других переменных экземпляра, которые определены в моем блоке User? Как вы, наверное, знаете, помещая следующий код в одном из моих контроллеров у меня есть доступ к следующим таких областях, как: имя пользователя, пароль включен, власти и т.д.Информация о безопасности Spring Security

UserDetails userDetails = 
       (UserDetails) ((Authentication)principal).getPrincipal(); 

Я хотел бы получить другую информацию такие как следующие переменные экземпляра я определил в моем объекте пользователя (ID, имя, электронный адрес, ETC):

// Instance Variables 
private int id; 
private String name; 
private String email; 
private String username; // I can already obtain this 
private String password; // I can already obtain this 

могли бы вы предоставить некоторую дополнительную помощь в пути, который я могу получить более подробную информацию?

ответ

1

Как вы знаете, что вы можете получить UserDetails объект, используя следующий код.

UserDetails userDetails = (UserDetails) SecurityContextHolder.getContext().getAuthentication().getPrincipal(); 

Используя объект UserDetails, вы можете получить имя пользователя, пароль и полномочия. Теперь вам нужен идентификатор и адрес электронной почты этого пользователя. В этом случае, как только ваш пользователь будет аутентифицирован, вы можете получить запрос к базе данных, который вернет вам пользовательский объект по имени пользователя.

1

Пользовательский объект должен реализовывать интерфейс UserDetails. Когда вы получите ссылку на него, произведите его правильно, чтобы вы могли получить доступ к методам getter.

Допустим, ваш пользовательский объект похож

public class MyUser implements UserDetails{ 
    private int id; 
    private String name; 
    private String email; 
    private String username; 

} 

После успешного входа в систему вы бы хранить экземпляр MyUser в качестве основного.

Тогда

 MyUser userDetails = 
      (MyUser) ((Authentication)principal).getPrincipal(); 
    String name = userDetails.getName(); 
+0

Благодарим за это. Не могли бы вы привести пример того, что вы подразумеваете под «Когда вы получите ссылку на него, произведите его правильно». Это будет оценено. – Maff

Смежные вопросы