SAAJInInterceptor和WSS4JInInterceptor CXF拦截器

时间:2016-04-29 14:11:38

标签: java spring web-services cxf

任何人都可以解释这个bean配置文件中使用的2个 cxf拦截器之间的区别。

我在这里使用拦截器 SAAJInInterceptor WSS4JInInterceptor 声明 jaxws:endpoint 元素。

为什么有2个拦截器?

2?

之间的区别是什么?

一个拦截器可以在没有其他拦截器的情况下工作吗?

    <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jaxws="http://cxf.apache.org/jaxws"
        xmlns:jaxrs="http://cxf.apache.org/jaxrs"
        xsi:schemaLocation="http://cxf.apache.org/jaxws 
                            http://cxf.apache.org/schemas/jaxws.xsd
                            http://www.springframework.org/schema/beans 
                            http://www.springframework.org/schema/beans/spring-beans.xsd
                            http://cxf.apache.org/jaxrs 
                            http://cxf.apache.org/schemas/jaxrs.xsd">
        <jaxws:endpoint id="auth"
                        implementor="com.company.auth.service.AuthServiceImpl" 
                        address="/corporateAuth">
            <jaxws:inInterceptors>
                <bean class="org.apache.cxf.binding.soap.saaj.SAAJInInterceptor"></bean>
                <bean class="org.apache.cxf.ws.security.wss4j.WSS4JInInterceptor">
                    <constructor-arg>
                        <map>
                            <entry key="action" value="UsernameToken" />
                            <entry key="passwordType" value="PasswordText" />
                            <entry key="passwordCallbackClass" value="com.company.auth.service.ServerPasswordCallback"></entry>
                        </map>
                    </constructor-arg>
                </bean>
            </jaxws:inInterceptors>
        </jaxws:endpoint>
    </beans>

感谢您的解释。

2 个答案:

答案 0 :(得分:2)

如果您使用的是CXF 2.0.x或更低版本,则只需添加SAAJInterceptors。从CXF 2.1.x开始,它们将自动添加:http://cxf.apache.org/docs/ws-security.html

答案 1 :(得分:1)

SAAJInInterceptor会将传入的消息转换为DOM消息,以便WSS4JInInterceptor可以处理它。 WSS4JInInterceptor对传入消息应用指定的WS-Security操作。