我想将现有的基于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
),所以我需要在那里使用任何注释吗?我如何注册拦截器?
感谢您的帮助!
答案 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
。