2014-10-17 2 views
0

Я сделал этот учебник: http://www.mkyong.com/spring-security/spring-security-hibernate-annotation-example/Доступ к данным пользователя в Spring, Hibernate

И это прекрасно работает. Но я ничего не понимаю. Я добавляю новый столбец в свою базу данных. Он называется FullName. Я завершил класс User с помощью метода setter и getter. Но, например, как я могу получить доступ к этим данным на странице администратора? Как распечатать имя пользователя сеанса. Например: Привет, ваше полное имя.

Редактировать: Как я могу получить доступ к другим деталям зарегистрированного пользователя, таким как полное имя, адрес, пол и тому подобное, а не только имя пользователя и пароль?

Edit2: Спасибо, теперь это яснее. Мой единственный вопрос. Он преобразует свой собственный класс User в org.springframework.security.core.userdetails.User. И этот класс не имеет конструктора с полным именем. Итак, нужно ли создать собственный класс UserDetails, переопределить orginial. Или что мне нужно делать?

Редактировать 3: Извините, но я не понимаю этого. Какой метод обслуживания? Можете ли вы показать это для меня этим примером. Большое спасибо.

ответ

1

Вы добавили код в контроллер класса MainController, который приведен в примере, указанном на сайте mkyong.

@RequestMapping(value = "/admin**", method = RequestMethod.GET) 
public ModelAndView adminPage() { 

    ModelAndView model = new ModelAndView(); 
    model.addObject("title", "Spring Security + Hibernate Example"); 
    model.addObject("message", "This page is for ROLE_ADMIN only!"); 
    model.setViewName("admin"); 

    String fullName = ...; // Add the required logic to get the full name. 
    model.addObject("FullName", fullName); // Then add the fullName to your model object 

    return model; 

} 

Затем окончательно отредактировать файл admin.jsp для отображения полного имени.

Update:

Необходимый код также доступен в mkyong ссылке. Вот фрагмент, взятый с той же страницы:

В классе UserDaoImpl.java есть весь код, необходимый для вашей функциональности.

List<User> users = new ArrayList<User>(); 

users = sessionFactory.getCurrentSession() 
    .createQuery("from User where username=?") 
    .setParameter(0, username) 
    .list(); 

if (users.size() > 0) { 
    return users.get(0); 
} else { 
    return null; 
} 

Когда вы получаете объект пользователя из зимуют он загружает все свойства пользователя, как вы добавили новое поле - FullName, то это поле будет загружаться в объект пользователя с помощью спящего режима, если у вас есть собственное отображение в HBM файлов.

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

код от класса обслуживания:

@Transactional(readOnly=true) 
@Override 
public UserDetails loadUserByUsername(final String username) throws UsernameNotFoundException { 

    com.mkyong.users.model.User user = userDao.findByUserName(username); 
    List<GrantedAuthority> authorities = buildUserAuthority(user.getUserRole()); 

    return buildUserForAuthentication(user, authorities); 

} 

// Converts com.mkyong.users.model.User user to 
// org.springframework.security.core.userdetails.User 
private User buildUserForAuthentication(com.mkyong.users.model.User user, List<GrantedAuthority> authorities) { 
    return new User(user.getUsername(), user.getPassword(), user.isEnabled(), true, true, true, authorities); 
} 

Как вы можете видеть здесь, из приведенного выше кода, новый объект пользователя создается в строке:

new User(user.getUsername(), user.getPassword(), user.isEnabled(), true, true, true, authorities); 

холмик обновление этой линии включить полное имя а также добавить требуемый конструктор в класс User.

+0

Спасибо, но меня интересует логика, например. – Roberto

+0

@Roberto, вы пробовали понять пример, приведенный на сайте mkyong? Весь код присутствует в этом примере, просто вам нужно добавить очень мало строк, чтобы добавить FullName. Я обновил свой ответ с подробностями о том, как вы можете это сделать. – Chaitanya

+0

Спасибо, теперь яснее. Мой единственный вопрос. Он преобразует свой собственный класс User в org.springframework.security.core.userdetails.User. И этот класс не имеет конструктора с полным именем. Итак, нужно ли создать собственный класс UserDetails, переопределить orginial.Или что мне нужно делать? – Roberto

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