В Spring Security 3.1 я использую аутентификацию на основе форм и хочу добавить дополнительные атрибуты в объект UserDetails.

Я новичок в Springs и не являюсь продвинутым программистом Java.

Я создаю прототип, в котором я использую безопасность Springs. для простоты я использую аутентификацию пользователей на основе формы JSP и имею несколько фиктивных пользователей в моем applicationContext-security.xml

<security:http auto-config='true'>
  <security:intercept-url pattern="/**" access="ROLE_USER" />
</security:http>

<security:authentication-manager>
  <security:authentication-provider>
    <security:user-service>
      <security:user name="foo" password="foo" authorities="ROLE_USER, ROLE_ADMIN" />
      <security:user name="bob" password="bob" authorities="ROLE_USER" />
    </security:user-service>
  </security:authentication-provider>
</security:authentication-manager>

Идея состоит в том, что позже этот метод аутентификации будет заменен аутентификацией OpenId.

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

то, что я исследовал до сих пор, это то, что мне нужно создать свой собственный UserDetailsService

мой вопрос: если я использую стандартный метод аутентификации Springs, мне нужно создать собственный UserDetailsService? Я просто хочу сохранить некоторые дополнительные сведения, читая их из базы данных.

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

Благодарность


person Mrinmoy    schedule 20.02.2012    source источник


Ответы (1)


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

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

person Shaun the Sheep    schedule 21.02.2012
comment
круто, это то, что я искал. очень простой и понятный пример для начинающих вроде меня. можете ли вы сказать мне еще одну вещь, как только я изменю свой процесс аутентификации на OpenID, тогда эта пользовательская реализация исчезнет. но я все же хотел бы сохранить некоторые дополнительные атрибуты в userDetails. То есть мне нравится проходить аутентификацию в службе OpenID, такой как Gmail. если аутентификация прошла успешно, то на основе электронной почты я бы выполнил локальный поиск в своей базе данных и загрузил некоторые дополнительные атрибуты в объект userdetails. Это возможно ? или у вас есть какие-либо другие предложения для достижения этого - person Mrinmoy; 22.02.2012
comment
Это очень похоже. Посмотрите пример кода OpenID в кодовой базе Spring Security. Он использует пользовательский объект UserDetails с атрибутами, полученными от поставщика OpenID. Добавление некоторого локального кода JDBC должно быть тривиальным. - person Shaun the Sheep; 22.02.2012