He creado un servicio web Axis como una aplicación Java 6 ejecutándose en Tomcat 7. Para la seguridad, el marco Spring Security 2.0.1 está integrado.Seguridad de primavera: excluyendo el documento WSDL de requerir autenticación
Por razones de seguridad, el punto final del servicio debe estar protegido con autenticación básica. Sin embargo, el documento WSDL debe estar a disposición del público.
He creado una configuración de seguridad de Primavera de esta manera:
<?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>
El problema es que sin importar el orden de las líneas de intercepción-url, la línea
<intercept-url pattern="/services/InitechAuthenticationService*" access="ROLE_WSUSER" />
siempre parece ser aplicado y la línea
<intercept-url pattern="/services/InitechAuthenticationService?wsdl" filters="none" />
se ignora. Hubiera esperado que uno pudiera controlar el comportamiento de alguna manera, p. especificando el orden (para que Spring Security seleccione la primera o la última regla de coincidencia) o por la especificidad de las reglas para que Spring Security seleccione la regla más específica, es decir, la que tiene "wsdl" al final en este caso. ¿Cómo puedo excluir la autentificación del documento WSDL, permitiendo al mismo tiempo la autenticación para usar realmente el WS?