2012-05-04 4 views
6

Tomcat 7에서 실행되는 Java 6 애플리케이션으로 Axis 웹 서비스를 만들었습니다. 보안을 위해 Spring Security 2.0.1 프레임 워크가 통합되었습니다.스프링 보안 : WSDL 문서가 인증을 요구하지 않음

보안상의 이유로 서비스 끝점은 기본 인증으로 보호되어야합니다. 그러나 WSDL 문서는 공개적으로 사용할 수 있어야합니다.

나는이 같은 봄 보안 구성을 만든

:


<?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가 가장 구체적인 규칙, 즉이 경우 끝에 "wsdl"을 가진 규칙을 선택하도록 순서를 지정함으로써 (Spring Security가 첫 번째 또는 마지막으로 일치하는 규칙을 선택하도록) 또는 규칙의 특수성에 의해 결정됩니다. WSDL 문서를 인증에서 제외 할 수 있습니까? 실제로 WS를 실제로 사용하기위한 인증을 사용 하시겠습니까?

답변

4

Ant Path Matcher 대신 정규식을 사용하도록 구성의 http 부분을 변경하여이 문제를 해결했습니다. 전체 작업 구성은 여기에 있습니다 :


<?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. 추가 경로 형 "정규식"속성이
  2. 변경하여 http? ~에? wsdl에 대한 intercept-url에서
관련 문제