【问题标题】:jax-rs with cxf interceptors and callback handler带有 cxf 拦截器和回调处理程序的 jax-rs
【发布时间】:2016-05-16 10:52:09
【问题描述】:

我想将现有的基于 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 sessionService 的方法 handle(Callback[] callbacks),它会检查正确的凭据(用户名 + 令牌)。这个 bean 实现了接口CallbackHandler

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

感谢您的帮助!

【问题讨论】:

  • 你能解决这个@Philipp吗?
  • 实际上我们不会继续这种安全方法,因为我们现在使用的是不同的框架。不过感谢您的帮助!
  • 好的。请问你现在用的是什么框架?也可以帮到我!
  • 它实际上是我工作的公司的自制框架。它使用 oauth 来保证安全。我还不知道细节,我们还在准备中

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


【解决方案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

【讨论】:

    猜你喜欢
    • 2016-12-08
    • 2013-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多