2012-03-15 4 views
0

У меня есть таблица элементов, пользователь должен иметь возможность выбирать некоторые из них, затем эти элементы помещаются в другую таблицу (во второй таблице они связаны с пользователем, который выбрал Предметы). Я мог бы связать элементы и пользователей с помощью имен пользователей, но я полагаю, что это не будет здорово. Интересно, что это хороший способ сделать это. Я знаю, что есть простой способ получить имя пользователя (<sec:authentication property="principal.username"/>), но сегодня я узнал, что такого идентификатора нет. Каков хороший способ решить эту проблему? Должен ли я реализовать UserDetails, чтобы иметь возможность получить каждый идентификатор? Есть ли хороший пример этой реализации? Я использую Hibernate для связи с базой данных. Есть ли другой способ идентификации (составной ключ состоит из значений, которые легко получить или что-то в этом роде)? Заранее спасибо.Получение уникальных пользовательских данных в Spring Security

ответ

2

Да, вы должны реализовать свой собственный UserDetail, который будет иметь атрибут id.

После этого вы заполните этот объект во время аутентификации в своей реализации UserDetailService.

Например:

@Service("CustomUserDetailService") 
public class CustomUserDetailService implements UserDetailsService{ 

    @Autowired 
    private IUserDao userDao; 

    @Override 
    public UserDetails loadUserByUsername(String name) throws UsernameNotFoundException, DataAccessException { 
     User user = userDao.loadByName(name); 
     CustomUserDetail customUserDetail = new CustomUserDetail(); 
     customUserDetail.setId(user.getId()); 
     customUserDetail.setPassword(user.getPassword()); 
     return customUserDetail ; 
    } 

После этого вы можете получить что-либо от вашего основного:

<sec:authentication property="principal.id"/> 
+0

Спасибо, этот пример выглядит очень красиво. Я нашел несколько учебников, но они, похоже, подходят для других задач, и все немного отличаются в структуре классов. Не могли бы вы предоставить ссылку (если она есть) на полный пример? –

+1

Хорошо, я думаю, вы можете найти множество примеров онлайн, поэтому я не дам другую ссылку, которую вы можете найти в Google. Вместо этого я даю ссылку на мой персональный gitHub, где я использую Spring sec, проверьте это https://github.com/shagaan/Wicked-Book/tree/master/src/main/java/com/tuto/wickedBook/security –

+0

Спасибо много, это прекрасный пример! –

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