Получение уникальных пользовательских данных в Spring Security - PullRequest
0 голосов
/ 15 марта 2012

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

1 Ответ

2 голосов
/ 15 марта 2012

Да, вы должны реализовать свой собственный 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"/>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...