2013-07-23 3 views
0

мне нужно настроить мой процесс аутентификации таким образом:пружина безопасности - позиционирование пользовательских фильтров

  1. Клиент посылает запрос (REST API) с «особой» URL PARAM
  2. Сервер называет третьей стороной прохождения службы параметр и имя получателя
  3. Сервер ищет базу данных по имени, и это аутентифицированный директор.

Я разделил мою сторону сервера (2 + 3) на две части - пользовательский фильтр для (2), который получает имя пользователя - и пользовательские userdetailservice для (3), который строит принципала путем поиска имени в базе данных.

Но я не могу правильно построить свой security.xml - каждый раз, когда кажется, что он не обрабатывает фильтр вообще. Я думаю, проблема в первом (http) узле, но я не могу понять, какую позицию я должен настроить для фильтра. Вот моя конфигурация:

<http use-expressions="true" auto-config="true" authentication-manager-ref="authenticationManager"> 
    <intercept-url pattern="/*" access="isAuthenticated" /> 
    <custom-filter ref="casServiceTicketFilter" position="FIRST"/> 
</http> 

<authentication-manager alias="authenticationManager"> 
    <authentication-provider user-service-ref="wliAuthenticationService"/> 
</authentication-manager> 

<b:bean id="casServiceTicketFilter" class="org.WLICASAuthenticationFilter"> 
    <b:property name="casTicketValidateURL" value="${cas.ticket.validate.url}"/> 
    <b:property name="authenticationManager" ref="authenticationManager"/> 
</b:bean> 

<b:bean id="wliAuthenticationService" class="org.WLIUserDetailService"/> 

PS- Пожалуйста, не говорите мне, что Spring имеет поддержку CAS из коробки. Это немного различная конфигурация, поэтому мне нужно создать мою собственную реализацию валидатора обслуживания билетов

ответ

1

Ваш собственный фильтр проверки подлинности не должен быть первым в цепочке фильтров. Он должен появиться после SecurityContextPersistenceFilter. Использовать

<custom-filter ref="casServiceTicketFilter" after="SECURITY_CONTEXT_FILTER"/> 

вместо этого.

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

+0

Hi Luke. Как насчет позиции 'CAS_FILTER'? Или это не имеет значения? –

+0

Это тоже сработает, но не имеет значения, есть ли у вас единственный фильтр проверки подлинности. –

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