jax-rs与cxf拦截器和回调处理程序

时间:2016-05-16 10:52:09

标签: java web-services rest jax-rs cxf

我想将现有的基于XML的Web服务转换为REST Web服务。虽然服务已经开始,但我正在努力实施安全性。

在前一个实现中,我们使用了这样的拦截器(文件ws-server-context.xml):

<jaxws:endpoint id="someService" implementor="..." address="/..." >
    <jaxws:inInterceptors>
        <bean class="org.apache.cxf.binding.soap.saaj.SAAJInInterceptor" />
        <bean class="org.apache.cxf.ws.security.wss4j.WSS4JInInterceptor">
            <constructor-arg>
                <map>
                    <entry key="action" value="UsernameToken" />
                    <entry key="passwordType" value="PasswordText" />
                    <entry key="passwordCallbackRef" value-ref="sessionService" />
                </map>
            </constructor-arg>
        </bean>
    </jaxws:inInterceptors>
</jaxws:endpoint>

每当调用此端点的地址时,都会调用bean handle(Callback[] callbacks)的方法sessionService,从而检查正确的凭据(用户名+令牌)。这个bean实现了接口CallbackHandler

如何在JAX-RS中实现此方法?端点是在webservice类本身定义的(@Path),所以我需要在那里使用任何注释吗?我如何注册拦截器?

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

您可以在web.xml中声明一个过滤器 - 而不是拦截器 -

<filter>
        <display-name>MyFilter</display-name>
        <filter-name>MyFilter</filter-name>
        <filter-class>com.*.MyFilter</filter-class>
 </filter>
 <filter-mapping>
        <filter-name>MyFilter</filter-name>
        <url-pattern></url-pattern> <!-- keep this same as your rest servlet's url pattern -->
 </filter-mapping>

在JAX-RS实现之前将调用此类。

您可以在过滤器类中引用callBackHandler