2014-09-19 100 views
1

我已經使用wss4j SimplePasswordValidationCallbackHandler創建並驗證了示例web服務。使用wss4j驗證選擇性彈簧web服務器SimplePasswordValidationCallbackHandler

端點類:

@Endpoint                    
public class HolidayEndpoint { 

    private static final String NAMESPACE_URI = "http://mycompany.com/hr/schemas"; 

    @PayloadRoot(namespace = NAMESPACE_URI, localPart = "HolidayRequest") 
    public HolidayResponse handleHolidayRequest(HolidayRequest holidayRequest)    
     throws Exception { 
     HolidayResponse result = new HolidayResponse(); 
    result.setResult(1); 
    return result; 
    } 
} 

配置:

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

    <bean id="wsServerSecurityInterceptor" 
     class="org.springframework.ws.soap.security.wss4j.Wss4jSecurityInterceptor"> 
     <property name="validationActions" value="UsernameToken" /> 
     <property name="validationCallbackHandler"> 
      <bean id="callbackHandler" 
       class="org.springframework.ws.soap.security.wss4j.callback.SimplePasswordValidationCallbackHandler"> 
       <property name="users"> 
        <props> 
         <prop key="Bert">Ernie</prop> 
        </props> 
       </property> 
      </bean> 
     </property> 
    </bean> 

服務和認證,因此是工作的罰款。

現在我想添加另一個沒有此身份驗證的Spring Web服務。 這裏的問題是我沒有定義任何可以應用身份驗證的服務集。因此,對於我創建的每個新的Spring Web服務,都會應用相同的身份驗證規則。

任何人都可以請建議我如何才能使此認證僅適用於一組選定的服務,並將一些不同的認證規則應用於不同的服務組。

回答

0

訣竅是爲您的安全攔截器使用一個SmartEndpointInterceptor包裝。智能攔截器可以決定是否攔截給定的消息。配置它最簡單的方法是在你配置一個<sws:interceptors>塊:

<sws:annotation-driven/> <!-- Instead of the PayloadRootAnnotationMethodEndpointMapping bean definition --> 

    <sws:interceptors> 
     <sws:payloadRoot namespaceUri="http://mycompany.com/hr/schemas" localPart="HolidayRequest"> 
      <ref bean="wsServerSecurityInterceptor"/> 
     </sws:payloadRoot> 
    </sws:interceptors> 

    <bean id="wsServerSecurityInterceptor" 
     class="org.springframework.ws.soap.security.wss4j.Wss4jSecurityInterceptor"> 
     <property name="validationActions" value="UsernameToken" /> 
     <property name="validationCallbackHandler"> 
      <bean id="callbackHandler" 
       class="org.springframework.ws.soap.security.wss4j.callback.SimplePasswordValidationCallbackHandler"> 
       <property name="users"> 
        <props> 
         <prop key="Bert">Ernie</prop> 
        </props> 
       </property> 
      </bean> 
     </property> 
    </bean> 

在這個例子中,安全攔截器將只適用於與http://mycompany.com/hr/schemas命名空間和HolidayRequest本地名稱的消息。