2012-05-04 1 views
6

Я создал веб-службу Axis в качестве приложения Java 6, работающего на Tomcat 7. Для обеспечения безопасности интегрирована среда Spring Security 2.0.1.Весенняя безопасность: исключая документ WSDL, требующий проверки подлинности

Для целей безопасности конечная точка обслуживания должна быть защищена базовой аутентификацией. Однако документ WSDL должен быть общедоступным.

Я создал конфигурацию Spring безопасности, как это:


<?xml version="1.0" encoding="UTF-8"?> 
<beans:beans xmlns="http://www.springframework.org/schema/security" 
    xmlns:beans="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation=" 
      http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd 
      http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-2.0.1.xsd"> 

    <http> 
     <intercept-url pattern="/services/InitechAuthenticationService*" access="ROLE_WSUSER" /> 
     <intercept-url pattern="/services/InitechAuthenticationService?wsdl" filters="none" /> 
     <http-basic /> 
    </http> 

    <authentication-provider> 
     <user-service> 
      <user name="internal" password="${WS_USER_INTERNAL_PASSWORD}" authorities="ROLE_WSUSER" /> 
      <user name="external" password="${WS_USER_EXTERNAL_PASSWORD}" authorities="ROLE_WSUSER" /> 
     </user-service> 
    </authentication-provider> 

</beans:beans> 

Проблема заключается в том, что независимо от порядка перехватывать URL домашней линии, линии


<intercept-url pattern="/services/InitechAuthenticationService*" access="ROLE_WSUSER" /> 

всегда, кажется, применяется и строка


<intercept-url pattern="/services/InitechAuthenticationService?wsdl" filters="none" /> 

игнорируется. Я бы предположил, что можно каким-то образом контролировать поведение, например. путем определения порядка (так, чтобы Spring Security выбирала либо первое, либо последнее правило сопоставления), либо спецификой правил, чтобы Spring Security выбирала наиболее конкретное правило, т. е. одно с «wsdl» в конце в этом случае. Как я могу исключить проверку подлинности WSDL-документа, одновременно используя аутентификацию для фактического использования WS?

ответ

4

Я решил проблему, изменив http-часть конфигурации, чтобы использовать регулярные выражения вместо Ant Path Matcher. Полная рабочая конфигурация здесь:


<?xml version="1.0" encoding="UTF-8"?> 
<beans:beans xmlns="http://www.springframework.org/schema/security" 
    xmlns:beans="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation=" 
      http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd 
      http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-2.0.1.xsd"> 

    <http path-type="regex"> 
     <intercept-url pattern="/services/InitechAuthenticationService*" access="ROLE_WSUSER" /> 
     <intercept-url pattern="/services/InitechAuthenticationService\\?wsdl" filters="none" /> 
     <http-basic /> 
    </http> 

    <authentication-provider> 
     <user-service> 
      <user name="internal" password="${WS_USER_INTERNAL_PASSWORD}" authorities="ROLE_WSUSER" /> 
      <user name="external" password="${WS_USER_EXTERNAL_PASSWORD}" authorities="ROLE_WSUSER" /> 
     </user-service> 
    </authentication-provider> 

</beans:beans> 

Изменения:

  1. добавлен путь типа "регулярное выражение" атрибут HTTP
  2. изменилось? to \\? в перехвате-url для wsdl
Смежные вопросы