2013-11-07 3 views
2

У меня CAS 3 Spring 3.2 и Spring Security 3.2 работает на tomcat 7 с базой данных MySQL.Имя пользователя из CAS и Роли из другой базы данных

Мы используем базу данных MySQL с CAS для аутентификации пользователей, то мы передаем атрибуты после успешной, мы получаем те детали из базы данных называется сказать «SSO»

<bean id="attributeRepository" class="org.jasig.services.persondir.support.jdbc.SingleRowJdbcPersonAttributeDao"> 

    <constructor-arg index="0" ref="dataSource"/> 
    <constructor-arg index="1" value="select * from user where {0}" /> 
    <property name="queryAttributeMapping"> 
     <map> 
      <entry key="username" value="user_name" /> 
     </map> 
    </property> 

    <property name="resultAttributeMapping"> 
     <map> 
      <entry key="user_name" value="username" /> 
      <entry key="full_name" value="fullname" /> 
     </map> 
    </property> 
</bean> 

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

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

Как мы можем это сделать правильно?

UPDATE

Хорошо, теперь, что я пытался до сих пор, и я действительно не знаю, что действительным или нет.

Я реализовал UserDetailsService и я создал UserEntityDetails, который проходит мой UserEntity и Реализует UserDetails, Тогда я использовал мой UserDetailsService, чтобы загрузить мой собственный созданный класс.

Тогда в моем XML Я сделал это

<security:authentication-manager alias="authenticationManager"> 
     <security:authentication-provider ref="casAuthProvider" user-service-ref="DBUserServiceDetails" /> 
    </security:authentication-manager> 

Является ли это правильный способ сделать это?

ответ

1

Если я не понимаю ваш вопрос, то, что вы просите, является обычным шаблоном использования - CasAuthenticationProvider настроен на UserDetailsService, который загружает роли из локальной базы данных, а не из CAS.

Если вы посмотрите на CAS sample application configuration, вы просто замените фасоль userService своей собственной реализацией, которая загрузила пользовательскую информацию из вашей базы данных приложения.

+0

Хорошо, тогда почему здесь пароль? не должен ли пароль быть в CAS? – engma

+0

Это просто потому, что это синтаксис пространства имен 'user-service', которое используется для простоты здесь. 'CasAuthentictaionProvider' не должен заботиться о свойстве пароля загруженного объекта UserDetails. Возможно, вы захотите прочитать [эту часть руководства] (http://docs.spring.io/spring-security/site/docs/3.1.x/reference/springsecurity-single.html#cas-sequence). Шаг 14 - это загрузка роли. –

+0

ok попробует и даст вам обратную связь с результатами. – engma

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