加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

XFIRE的身份验证

发布时间:2020-12-17 02:48:34 所属栏目:安全 来源:网络整理
导读:XFire提供了四种身份验证的方式,分别是http验证,JSR181,Handler验证,WS-Security。 SOAP的原理告诉我们一个WS交互的流程是客户端发送请求-服务器接收请求-服务器发送数据-客户端接收数据,handler可以让我们在这四个操作中之前进行编码,所以,我们的验

XFire提供了四种身份验证的方式,分别是http验证,JSR181,Handler验证,WS-Security。

SOAP的原理告诉我们一个WS交互的流程是客户端发送请求->服务器接收请求->服务器发送数据->客户端接收数据,handler可以让我们在这四个操作中之前进行编码,所以,我们的验证进行在客户端发送请求和服务器接收请求的时候,因此,我们要写两个handler,然后把它们装配上就可以了。

Handler验证方式如下:

主要参考的实例是XFIREdemo中的BOOK

服务器的代码如下
  1. package?org.codehaus.xfire.demo.handlers; ??
  2. ??
  3. import?org.codehaus.xfire.MessageContext; ??
  4. import?org.codehaus.xfire.XFireRuntimeException; ??
  5. import?org.codehaus.xfire.handler.AbstractHandler; ??
  6. import?org.jdom.Element; ??
  7. import?org.jdom.Namespace; ??
  8. ??
  9. /** ?
  10. ?*?@author?<a?href="mailto:tsztelak@gmail.com">Tomasz?Sztelak</a> ?
  11. ?*? ?
  12. ?*?Retrive?service?version?from?SOAP?header. ?
  13. ?*/??
  14. public?class?CheckVersionHandler?extends?AbstractHandler?{ ??
  15. ??
  16. ????private?static?final?String?VERSION_TAG?=?"version"; ??
  17. ??
  18. ????private?static?final?String?VERSION_NS?=?"http://xfire.codehaus.org/Book"; ??
  19. ??
  20. ????public?void?invoke(MessageContext?ctx)?throws?Exception?{ ??
  21. ????????//?Check?if?header?exists ??
  22. ????????Element?header?=?ctx.getInMessage().getHeader(); ??
  23. ????????if?(header?==?null)?{ ??
  24. ????????????throw?new?XFireRuntimeException("Missing?SOAP?header"); ??
  25. ????????} ??
  26. ????????//?Does?it?have?version?tag ??
  27. ????????Element?version?=?header.getChild(VERSION_TAG,?Namespace ??
  28. ????????????????.getNamespace(VERSION_NS)); ??
  29. ????????if?(version?==?null)?{ ??
  30. ????????????throw?new?XFireRuntimeException("Missing?version?header"); ??
  31. ????????} ??
  32. ??
  33. ????????ctx.setProperty("ServiceVersion",?version.getText()); ??
  34. ????} ??
  35. ??
  36. } ??
客户端的代码
  1. package?org.codehaus.xfire.demo.handlers; ??
  2. ??
  3. import?org.codehaus.xfire.MessageContext; ??
  4. import?org.codehaus.xfire.handler.AbstractHandler; ??
  5. import?org.jdom.Element; ??
  6. ??
  7. /** ?
  8. ?*??@author?<a?href="mailto:tsztelak@gmail.com">Tomasz?Sztelak</a> ?
  9. ?* ?
  10. ?*?Add?version?info?to?SOAP?header. ?
  11. ?*/??
  12. public?class?OutHeaderHandler?extends?AbstractHandler?{ ??
  13. ???? ??
  14. ????private?static?final?String?VERSION_TAG?=?"version"; ??
  15. ??
  16. ????private?static?final?String?VERSION_NS?=?"http://xfire.codehaus.org/Book"; ??
  17. ??
  18. ????public?void?invoke(MessageContext?ctx)?throws?Exception?{ ??
  19. ???????? ??
  20. ????????Element?header?=?ctx.getOutMessage().getOrCreateHeader(); ??
  21. ????????header.addContent(new?Element(VERSION_TAG?,VERSION_NS).addContent("1.0")); ??
  22. ???????? ??
  23. ????} ??
  24. ??
  25. } ??

?

然后需要在services.xml中配置如下:

xml 代码
  1. <!--?START?SNIPPET:?services?-->??
  2. <beans?xmlns="http://xfire.codehaus.org/config/1.0">??
  3. ??<service>??
  4. ????<name>BookService</name>??
  5. ????<namespace>http://xfire.codehaus.org/BookService</namespace>??
  6. ????<serviceClass>org.codehaus.xfire.demo.BookService</serviceClass>??
  7. ????<implementationClass>org.codehaus.xfire.demo.BookServiceImpl</implementationClass>??
  8. ????<inHandlers>??
  9. ?????<handler?handlerClass="org.codehaus.xfire.demo.handlers.CheckVersionHandler"?/>??
  10. ????</inHandlers>??
  11. ??</service>??
  12. </beans>??
  13. <!--?END?SNIPPET:?services?-->
这样一来,使用这个原理就可以针对特定用户进行服务调用了。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读