2010-09-02 2 views
0

У меня есть сервис Spring-WS с помощью PayloadRootAnnotationMethodEndpointMapping, которая имеет несколько перехватчиков:Spring-WS SecurityInterceptor уровень работы

<bean class="org.springframework.ws.server.endpoint.mapping.PayloadRootAnnotationMethodEndpointMapping">   
    <property name="interceptors"> 
     <list> 
      <ref local="loggingInterceptor"/> 
      <ref local="validatingInterceptor"/> 
      <ref local="securityInterceptor"/> 
     </list> 
    </property>  
</bean> 

Мой securityIntercetor является Wss4jSecurityInterceptor перехватчик.

Все работает нормально, за исключением того, что securityIntercetor находится на уровне @Endpoint, я хочу, чтобы он находился на @PayloadRoot (операция).

То, как я аутентифицирую пользователей, использует UsernameToken, тогда я иду против LDAP и получаю роли и в зависимости от роли, которую я хочу разрешить/запретить пользователю выполнять операцию.

Я предполагаю, что для этого не существует готового решения.

Так что мой вопрос: как в securityIntercetor я могу получить, какую операцию вызывается, поэтому я могу проверить в зависимости от моих настроек, чтобы разрешить или не выполнить конкретную операцию.

Возможно, у вас есть другие идеи.

Спасибо.

ответ

1

Нет стандартного способа сделать это.

Что я сделал, я создал другой перехватчик (и поместил его первым в списке вызывающего перехватчика), который сохранил бы текущую операцию, а затем, когда Spring попадет на мой перехватчик безопасности, я получу метод из объекта с привязкой к запросу который был создан моим первым перехватчиком.

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