@Override public void handleMessage(Message message) throws Fault { // Create a SAML Token SAMLCallback samlCallback = new SAMLCallback(); SAMLUtil.doSAMLCallback(new SamlCallbackHandler(), samlCallback); try { SamlAssertionWrapper assertion = new SamlAssertionWrapper(samlCallback); Document doc = DOMUtils.createDocument(); Element token = assertion.toDOM(doc); message.put(SAMLConstants.SAML_TOKEN_ELEMENT, token); } catch (WSSecurityException ex) { StringWriter sw = new StringWriter(); ex.printStackTrace(new PrintWriter(sw)); throw new Fault(new RuntimeException(ex.getMessage() + ", stacktrace: " + sw.toString())); } } }
public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException { for (int i = 0; i < callbacks.length; i++) { if (callbacks[i] instanceof NameCallback) { NameCallback nameCallback = (NameCallback)callbacks[i]; nameCallback.setName("alice"); } else if (callbacks[i] instanceof PasswordCallback) { PasswordCallback passwordCallback = (PasswordCallback)callbacks[i]; passwordCallback.setPassword("alice".toCharArray()); } else if (callbacks[i] instanceof WSPasswordCallback) { WSPasswordCallback wsPasswordCallback = (WSPasswordCallback)callbacks[i]; // Get a custom (Kerberos) token directly using the WSS4J APIs if (wsPasswordCallback.getUsage() == WSPasswordCallback.CUSTOM_TOKEN) { KerberosSecurity kerberosSecurity = new KerberosSecurity(DOMUtils.getEmptyDocument()); try { kerberosSecurity.retrieveServiceTicket("alice", this, "bob@service.ws.apache.org", false, false, null); kerberosSecurity.addWSUNamespace(); WSSConfig wssConfig = WSSConfig.getNewInstance(); kerberosSecurity.setID(wssConfig.getIdAllocator().createSecureId("BST-", kerberosSecurity)); wsPasswordCallback.setCustomToken(kerberosSecurity.getElement()); } catch (WSSecurityException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } }