Webservice_18_利用Handler实现方法认证
发布时间:2020-12-17 00:11:41 所属栏目:安全 来源:网络整理
导读:非常感谢孙浩老师。 实现addUser(User user)和list()方法必须有handler信息验证。 ? 服务端,验证Handler方法: @Overridepublic boolean handleMessage(SOAPMessageContext context) {Boolean flag = (Boolean) context.get(MessageContext.MESSAGE_OUTBOUN
非常感谢孙浩老师。 实现addUser(User user)和list()方法必须有handler信息验证。 ? 服务端,验证Handler方法: @Override public 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; }
@Override public 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信息时,客户端控制台: ? 服务端控制台没有异常: (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |