常见的webservice拦截器和UsernameTokenValidation与Spring-WS和CXF兼容

时间:2011-12-06 05:34:01

标签: web-services cxf spring-ws interceptor wss4j

我有一个场景,我想配置一个webservice安全拦截器和一个UsernameTokenValidator,并把它放到 myws-security.jar 中。然后,任何使用此jar的Web服务(无论是基于CXF还是Spring-WS)都可以使用它。处理这种情况的做法是什么。

使用 org.apache.cxf.ws.security.wss4j.WSS4JInInterceptor 类或 org.springframework.ws.soap.security.wss4j.Wss4jSecurityInterceptor 在这种情况下为我工作?

1 个答案:

答案 0 :(得分:0)

在Spring-WS和CXF中,您通常不提供自己的WSS拦截器,只需使用适当的回调处理程序配置提供的拦截器即可。因此,在您的情况下,如果您创建一个适当的回调处理程序(基于安全操作的类型),需要从javax.security.auth.callback.CallbackHandler继承,则此回调处理程序可以在Spring-WS和Apache CXF中重用:

在Spring-WS中,您可以按照这些方式做点什么:

<bean id="wss4jSecurityInterceptor" class="org.springframework.ws.soap.security.wss4j.Wss4jSecurityInterceptor">
    <property name="validationCallbackHandler" ref="callBackHandler" />
    <property name="validationActions" value="UsernameToken" />
</bean>   

在Apache CXF中:

<jaxws:endpoint address=".." id=".." implementor="#memberendpoint">
    <jaxws:inInterceptors>
        <bean class="org.apache.cxf.ws.security.wss4j.WSS4JInInterceptor">
            <constructor-arg>
                <map>
                    <entry key="action" value="UsernameToken" />
                    <entry key="passwordType" value="PasswordDigest" />
                    <entry key="passwordCallbackRef">
                        <ref bean="callBackHandler" />
                    </entry>
                </map>
            </constructor-arg>
        </bean>
    </jaxws:inInterceptors>

在这两种情况下,常见的callbackhandler应该适合你