/** * Copyright (C) 2011 Talend Inc. - www.talend.com */ package sts; import java.security.Principal; import org.apache.cxf.helpers.DOMUtils; import org.apache.cxf.sts.STSPropertiesMBean; import org.apache.cxf.sts.token.provider.TokenProvider; import org.apache.cxf.sts.token.provider.TokenProviderParameters; import org.apache.cxf.sts.token.provider.TokenProviderResponse; import org.apache.cxf.ws.security.sts.provider.STSException; import org.apache.wss4j.dom.WSConstants; import org.apache.wss4j.common.ext.WSPasswordCallback; import org.apache.wss4j.dom.engine.WSSConfig; import org.apache.wss4j.dom.message.token.UsernameToken; import org.w3c.dom.Document; /** * A TokenProvider implementation that creates a UsernameToken. */ public class UsernameTokenProvider implements TokenProvider { private static final String TOKEN_TYPE = WSConstants.WSS_USERNAME_TOKEN_VALUE_TYPE; public boolean canHandleToken(String tokenType) { if (TOKEN_TYPE.equals(tokenType)) { return true; } return false; } public boolean canHandleToken(String tokenType, String realm) { return canHandleToken(tokenType); } public TokenProviderResponse createToken(TokenProviderParameters tokenParameters) { try { Document doc = DOMUtils.createDocument(); Principal principal = tokenParameters.getPrincipal(); String user = principal.getName(); // Get the password WSPasswordCallback[] cb = {new WSPasswordCallback(user, WSPasswordCallback.USERNAME_TOKEN)}; STSPropertiesMBean stsProperties = tokenParameters.getStsProperties(); stsProperties.getCallbackHandler().handle(cb); String password = cb[0].getPassword(); if (password == null || "".equals(password)) { throw new STSException("No password available", STSException.REQUEST_FAILED); } UsernameToken ut = new UsernameToken(true, doc, WSConstants.PASSWORD_TEXT); ut.setName(user); ut.setPassword(password); WSSConfig config = WSSConfig.getNewInstance(); ut.setID(config.getIdAllocator().createId("UsernameToken-", ut)); TokenProviderResponse response = new TokenProviderResponse(); response.setToken(ut.getElement()); response.setTokenId(ut.getID()); return response; } catch (Exception e) { e.printStackTrace(); throw new STSException("Error creating UsernameToken", e, STSException.REQUEST_FAILED); } } }