2010-03-28 4 views
0

Мне нужно отправить определенные атрибуты (скажем, человекоподобное имя пользователя) с сервера на клиент после успешной проверки подлинности. Серверная часть была выполнена. Теперь атрибут был отправлен клиенту. Из журнала, я вижу:Как получить доступ/использовать пользовательский атрибут в Spring CAS-клиент на основе безопасности

2010-03-28 23: 48: 56669 DEBUG Cas20ServiceTicketValidator: 185 - Ответ сервера: http://www.yale.edu/tp/cas'> [email protected]

 <cas:proxyGrantingTicket>PGTIOU-1-QZgcN61oAZcunsC9aKxj-cas</cas:proxyGrantingTicket> 



     <cas:attributes> 

       <cas:FullName>Test account 1</cas:FullName> 

     </cas:attributes> 

</cas:authenticationSuccess> </cas:serviceResponse> 

Тем не менее, я не знаю, как получить доступ к атрибуту в клиенте (я использую Spring Security 2.0.5).

В authenticationProvider пользовательDetailsService настроен на чтение db для аутентифицированного принципала.

<bean id="casAuthenticationProvider" class="org.springframework.security.providers.cas.CasAuthenticationProvider"> 
    <sec:custom-authentication-provider /> 
    <property name="userDetailsService" ref="clerkManager"/> 
    <!-- other stuff goes here --> 
</bean> 

Сейчас в мой контроллер, я могу легко это сделать:

Clerk currentClerk = (Clerk)SecurityContextHolder.getContext().getAuthentication().getPrincipal(); 

В идеале, я могу заполнить атрибут этого клерка объекта в другое свойство в некотором роде. Как это сделать?

Или какой подход рекомендуется использовать для распределения атрибутов во всех приложениях с централизованным характером CAS?

+0

Является ли это веб-сервисом? RESTful? МЫЛО? – Gandalf

ответ

2

Для SpringSecurity - вам необходимо обновить 3.x использовать CAS атрибуты с помощью встроенной поддержки, см: GrantedAuthorityFromAssertionAttributesUserDetailsService.java

Это не выглядит как SpringSecurity 2.x заселяет на основе атрибутов CAS - если вы посмотрите на:

CasAuthenticationProvider.java на getUserDetailsService():

/** 
* Template method for retrieving the UserDetails based on the assertion. Default is to call configured userDetailsService and pass the username. Deployers 
* can override this method and retrieve the user based on any criteria they desire. 
* 
* @param assertion The CAS Assertion. 
* @returns the UserDetails. 
*/ 
protected UserDetails loadUserByAssertion(final Assertion assertion) { 
    return this.userDetailsService.loadUserByUsername(assertion.getPrincipal().getName()); 
} 

вы могли бы, конечно, переопределить с реализацией UserDetails, если вы должны остаться на 2.x для с разум.

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

  • Нет связанных вопросов^_^