Advertisement
Guest User

WSSecurity

a guest
Oct 5th, 2018
134
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.51 KB | None | 0 0
  1. package com.loves.idm;
  2.  
  3. import java.util.HashSet;
  4. import java.util.Set;
  5.  
  6. import javax.xml.namespace.QName;
  7. import javax.xml.soap.SOAPElement;
  8. import javax.xml.soap.SOAPEnvelope;
  9. import javax.xml.soap.SOAPFactory;
  10. import javax.xml.soap.SOAPHeader;
  11. import javax.xml.ws.handler.MessageContext;
  12. import javax.xml.ws.handler.soap.SOAPHandler;
  13. import javax.xml.ws.handler.soap.SOAPMessageContext;
  14.  
  15. public class WSSecurityHeaderSOAPHandler implements SOAPHandler<SOAPMessageContext> {
  16.  
  17. private static final String SOAP_ELEMENT_PASSWORD = "Password";
  18. private static final String SOAP_ELEMENT_USERNAME = "Username";
  19. private static final String SOAP_ELEMENT_USERNAME_TOKEN = "UsernameToken";
  20. private static final String SOAP_ELEMENT_SECURITY = "Security";
  21. private static final String NAMESPACE_SECURITY = "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd";
  22. private static final String PREFIX_SECURITY = "wsse";
  23. private static final String SOAP_ATTRIBUTE_MANDARORY = "mustUnderstand";
  24.  
  25. private String usernameText;
  26. private String passwordText;
  27.  
  28. public WSSecurityHeaderSOAPHandler(String usernameText, String passwordText) {
  29. this.usernameText = usernameText;
  30. this.passwordText = passwordText;
  31. }
  32.  
  33. public boolean handleMessage(SOAPMessageContext soapMessageContext) {
  34.  
  35. Boolean outboundProperty = (Boolean) soapMessageContext.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY);
  36.  
  37. if (outboundProperty.booleanValue()) {
  38.  
  39. try {
  40. /*
  41. SOAPEnvelope envelope = soapMessageContext.getMessage().getSOAPPart().getEnvelope();
  42. SOAPFactory factory = SOAPFactory.newInstance();
  43. String prefix = "wsse";
  44. String uri = "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd";
  45. SOAPElement securityElem =
  46. factory.createElement("Security", prefix, uri);
  47. SOAPElement tokenElem =
  48. factory.createElement("UsernameToken", prefix, uri);
  49. tokenElem.addAttribute(QName.valueOf("wsu:Id"), "UsernameToken-2");
  50. tokenElem.addAttribute(QName.valueOf("xmlns:wsu"), "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd");
  51. SOAPElement userElem =
  52. factory.createElement("Username", prefix, uri);
  53. userElem.addTextNode(usernameText);
  54. SOAPElement pwdElem =
  55. factory.createElement("Password", prefix, uri);
  56. pwdElem.addTextNode(passwordText);
  57. pwdElem.addAttribute(QName.valueOf("Type"), "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText");
  58. tokenElem.addChildElement(userElem);
  59. tokenElem.addChildElement(pwdElem);
  60. securityElem.addChildElement(tokenElem);
  61. SOAPHeader header = envelope.addHeader();
  62. header.addChildElement(securityElem);
  63. */
  64.  
  65. SOAPEnvelope soapEnvelope = soapMessageContext.getMessage().getSOAPPart().getEnvelope();
  66.  
  67. SOAPHeader header = soapEnvelope.getHeader();
  68. if (header == null) {
  69. header = soapEnvelope.addHeader();
  70. }
  71.  
  72. SOAPElement soapElementSecurityHeader = header.addChildElement(SOAP_ELEMENT_SECURITY, PREFIX_SECURITY,
  73. NAMESPACE_SECURITY);
  74.  
  75. soapElementSecurityHeader.addAttribute(soapEnvelope.createName("mustUnderstand") , "1");
  76. SOAPElement soapElementUsernameToken = soapElementSecurityHeader.addChildElement(SOAP_ELEMENT_USERNAME_TOKEN, PREFIX_SECURITY);
  77. soapElementUsernameToken.addAttribute(QName.valueOf("wsu:Id"), "UsernameToken-2");
  78. soapElementUsernameToken.addAttribute(QName.valueOf("xmlns:wsu"), "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd");
  79. SOAPElement soapElementUsername = soapElementUsernameToken.addChildElement(SOAP_ELEMENT_USERNAME, PREFIX_SECURITY);
  80. soapElementUsername.addTextNode(this.usernameText);
  81.  
  82.  
  83. SOAPElement soapElementPassword = soapElementUsernameToken.addChildElement(SOAP_ELEMENT_PASSWORD, PREFIX_SECURITY);
  84. soapElementPassword.addAttribute(QName.valueOf("Type"), "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText");
  85. soapElementPassword.addTextNode(this.passwordText);
  86.  
  87.  
  88. } catch (Exception e) {
  89. throw new RuntimeException("Error on wsSecurityHandler: " + e.getMessage());
  90. }
  91.  
  92. }
  93.  
  94. return true;
  95. }
  96.  
  97. @Override
  98. public void close(MessageContext context) {
  99. // TODO Auto-generated method stub
  100. }
  101.  
  102. @Override
  103. public boolean handleFault(SOAPMessageContext context) {
  104. // TODO Auto-generated method stub
  105. return true;
  106. }
  107.  
  108. @Override
  109. public Set<QName> getHeaders() {
  110. // throw new UnsupportedOperationException("Not supported yet.");
  111. final QName securityHeader = new QName(
  112. "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd",
  113. "Security", "wsse");
  114.  
  115. final HashSet headers = new HashSet();
  116. headers.add(securityHeader);
  117.  
  118. return headers;
  119. }
  120. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement