Webservice_18_利用Handler实现方法认证
来源:互联网 发布:90后童年游戏 知乎 编辑:程序博客网 时间:2024/06/08 11:51
非常感谢孙浩老师。
实现addUser(User user)和list()方法必须有handler信息验证。
服务端,验证Handler方法:
@Overridepublic boolean handleMessage(SOAPMessageContext context) {Boolean flag = (Boolean) context.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY);if (!flag) {try {SOAPMessage message = context.getMessage();SOAPEnvelope envelope = message.getSOAPPart().getEnvelope();SOAPHeader header = envelope.getHeader();SOAPBody body = envelope.getBody();Node bn = body.getChildNodes().item(0);String partname = bn.getLocalName();if ("list".equals(partname) || "addUser".equals(partname)) {if (header == null) {// 添加一个错误信息SOAPFault fault = body.addFault();fault.setFaultString("头部信息不能为空!");throw new SOAPFaultException(fault);}Iterator<SOAPHeaderElement> iterator = header.extractAllHeaderElements();if (!iterator.hasNext()) {// 添加一个错误信息SOAPFault fault = body.addFault();fault.setFaultString("头部信息不正确!");throw new SOAPFaultException(fault);}while (iterator.hasNext()) {SOAPHeaderElement ele = iterator.next();System.out.println(ele.getTextContent());}}} catch (SOAPException e) {e.printStackTrace();}}return true;}
客户端,给方法添加Handle:
@Overridepublic boolean handleMessage(SOAPMessageContext context) {Boolean flag = (Boolean) context.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY);if (flag) {try {SOAPMessage message = context.getMessage();SOAPEnvelope envelope = message.getSOAPPart().getEnvelope();SOAPBody body = envelope.getBody();Node node = body.getChildNodes().item(0);String pn = node.getLocalName();if("list".equals(pn)||"addUser".equals(pn)) {SOAPHeader header = envelope.getHeader();if(header==null) header = envelope.addHeader();QName name = new QName("http://soap.lichen.cn/", "licenseInfo");header.addHeaderElement(name).setValue("client message .......");message.writeTo(System.out);}message.writeTo(System.out);} catch (SOAPException | IOException e) {e.printStackTrace();}}return true;}
测试方法:
public static void main(String[] args) {URL url = null;try {url = new URL("http://localhost:9988/ns?wsdl");} catch (MalformedURLException e1) {e1.printStackTrace();}QName name = new QName("http://soap.lichen.cn/", "MyServiceImplService");MyServiceImplService mis = new MyServiceImplService(url, name);IMyService ms = mis.getMyServiceImplPort();try {// ms.login("admin", "111");User user = new User();user.setId(2);user.setUsername("lisi");user.setNickname("李四");user.setPassword("123456");Holder<User> holder = new Holder<User>(user);ms.addUser(holder);System.out.println("TestClient......");} catch (SOAPFaultException e) {System.out.println(e.getMessage());}}
结果:
handleMessage方法注释到handle信息时,客户端控制台:
handleMessage方法添加handle信息时,客户端控制台:
服务端控制台没有异常:
- Webservice_18_利用Handler实现方法认证
- 利用handler实现定时器的两种方法
- 利用ActiveDirectoryMembershipProvider实现表单认证
- 下面的程序实现了在利用Handler在新线程当中处理消息的方法
- android中Handler简介&利用Handler实现计时功能
- android中Handler简介&利用Handler实现计时功能
- Android之利用Handler实现ProgressBar进度条
- 安卓中利用Handler实现定时器的效果
- [Android] 利用Handler实现定时器功能
- 利用Tocmat安全域实现安全认证
- 利用Tocmat安全域实现安全认证
- 利用CI钩子实现权限认证 session
- 使用handler对web service进行访问的认证实现
- exosip注册/认证的简单实现方法
- exosip注册/认证的简单实现方法
- 利用Handler来更新android的UI实现动画
- 利用Handler来实现UI线程的更新
- Android中利用Handler实现图片轮播 ,示例+ 代码
- 非常好的Struts2请求处理流程及源码分析(强烈推荐!)
- 怎样在Android中监听声音改变事件
- 组合键捕获事件
- but was actually of type [$Proxy19]
- showModalDialog在原窗口刷新,不弹出新的窗口
- Webservice_18_利用Handler实现方法认证
- 学Spring控制反转(IoC)的三个阶段
- web集群时session同步的3种方法
- c语言自定义函数大全
- iOS开源项目
- Hibernate入门DEMO
- 漫谈Microsoft SQL Server连接中常见问题
- 【学习总结】图论经典-拓扑排序
- ORACLE 日期增加8小时