package org.jentrata.ebms.internal.security; import org.apache.wss4j.common.ext.WSPasswordCallback; import javax.security.auth.callback.Callback; import javax.security.auth.callback.CallbackHandler; import javax.security.auth.callback.UnsupportedCallbackException; import java.io.IOException; import java.util.Map; /** * A Callback Handler implementation for the case of processing a Username Token * with an encoded password. * * @author aaronwalker */ public class UsernamePasswordCallbackHandler implements CallbackHandler { private Map<String, String> users; @Override public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException { for(Callback callback : callbacks) { if (callback instanceof WSPasswordCallback) { WSPasswordCallback pc = (WSPasswordCallback) callback; if(pc.getUsage() == WSPasswordCallback.Usage.USERNAME_TOKEN) { if(users.containsKey(pc.getIdentifier())) { pc.setPassword(users.get(pc.getIdentifier())); } else { throw new UnsupportedCallbackException(callback,"Invalid authentication details"); } } } else { throw new UnsupportedCallbackException(callback, "Unrecognized Callback"); } } } public Map<String, String> getUsers() { return users; } public void setUsers(Map<String, String> users) { this.users = users; } }