Sample protocol bridge credential user exit
For information about how to use this sample user exit, see Mapping credentials for a file server by using exit classes
import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.util.Enumeration; import java.util.HashMap; import java.util.Map; import java.util.Properties; import java.util.StringTokenizer; import com.ibm.wmqfte.exitroutine.api.CredentialExitResult; import com.ibm.wmqfte.exitroutine.api.CredentialExitResultCode; import com.ibm.wmqfte.exitroutine.api.CredentialPassword; import com.ibm.wmqfte.exitroutine.api.CredentialUserId; import com.ibm.wmqfte.exitroutine.api.Credentials; import com.ibm.wmqfte.exitroutine.api.ProtocolBridgeCredentialExit; /** * A sample protocol bridge credential exit * * This exit reads a properties file that maps mq user ids to server user ids * and server passwords. The format of each entry in the properties file is: * * mqUserId=serverUserId,serverPassword * * The location of the properties file is taken from the protocol bridge agent * property protocolBridgeCredentialConfiguration. * * To install the sample exit compile the class and export to a jar file. * Place the jar file in the exits subdirectory of the agent data directory * of the protocol bridge agent on which the exit is to be installed. * In the agent.properties file of the protocol bridge agent set the * protocolBridgeCredentialExitClasses to SampleCredentialExit * Create a properties file that contains the mqUserId to serverUserId and * serverPassword mappings applicable to the agent. In the agent.properties * file of the protocol bridge agent set the protocolBridgeCredentialConfiguration * property to the absolute path name of this properties file. * To activate the changes stop and restart the protocol bridge agent. * * For further information on protocol bridge credential exits refer to * the WebSphere MQ Managed File Transfer documentation online at: * http://www-01.ibm.com/support/knowledgecenter/SSEP7X_7.0.4/welcome/WelcomePagev7r0.html */ public class SampleCredentialExit implements ProtocolBridgeCredentialExit { // The map that holds mq user ID to serverUserId and serverPassword mappings final private Map<String,Credentials> credentialsMap = new HashMap<String, Credentials>(); /* (non-Javadoc) * @see com.ibm.wmqfte.exitroutine.api.ProtocolBridgeCredentialExit#initialize(java.util.Map) */ public synchronized boolean initialize(Map<String, String> bridgeProperties) { // Flag to indicate whether the exit has been successfully initialized or not boolean initialisationResult = true; // Get the path of the mq user ID mapping properties file final String propertiesFilePath = bridgeProperties.get("protocolBridgeCredentialConfiguration"); if (propertiesFilePath == null || propertiesFilePath.length() == 0) { // The properties file path has not been specified. Output an error and return false System.err.println("Error initializing SampleCredentialExit."); System.err.println("The location of the mqUserID mapping properties file has not been specified in the protocolBridgeCredentialConfiguration property"); initialisationResult = false; } if (initialisationResult) { // The Properties object that holds mq user ID to serverUserId and serverPassword // mappings from the properties file final Properties mappingProperties = new Properties(); // Open and load the properties from the properties file final File propertiesFile = new File (propertiesFilePath); FileInputStream inputStream = null; try { // Create a file input stream to the file inputStream = new FileInputStream(propertiesFile); // Load the properties from the file mappingProperties.load(inputStream); } catch (FileNotFoundException ex) { System.err.println("Error initializing SampleCredentialExit."); System.err.println("Unable to find the mqUserId mapping properties file: " + propertiesFilePath); initialisationResult = false; } catch (IOException ex) { System.err.println("Error initializing SampleCredentialExit."); System.err.println("Error loading the properties from the mqUserId mapping properties file: " + propertiesFilePath); initialisationResult = false; } finally { // Close the inputStream if (inputStream != null) { try { inputStream.close(); } catch (IOException ex) { System.err.println("Error initializing SampleCredentialExit."); System.err.println("Error closing the mqUserId mapping properties file: " + propertiesFilePath); initialisationResult = false; } } } if (initialisationResult) { // Populate the map of mqUserId to server credentials from the properties final Enumeration<?> propertyNames = mappingProperties.propertyNames(); while ( propertyNames.hasMoreElements()) { final Object name = propertyNames.nextElement(); if (name instanceof String ) { final String mqUserId = ((String)name).trim(); // Get the value and split into serverUserId and serverPassword final String value = mappingProperties.getProperty(mqUserId); final StringTokenizer valueTokenizer = new StringTokenizer(value, ","); String serverUserId = ""; String serverPassword = ""; if (valueTokenizer.hasMoreTokens()) { serverUserId = valueTokenizer.nextToken().trim(); } if (valueTokenizer.hasMoreTokens()) { serverPassword = valueTokenizer.nextToken().trim(); } // Create a Credential object from the serverUserId and serverPassword final Credentials credentials = new Credentials(new CredentialUserId(serverUserId), new CredentialPassword(serverPassword)); // Insert the credentials into the map credentialsMap.put(mqUserId, credentials); } } } } return initialisationResult; } /* (non-Javadoc) * @see com.ibm.wmqfte.exitroutine.api.ProtocolBridgeCredentialExit#mapMQUserId(java.lang.String) */ public synchronized CredentialExitResult mapMQUserId(String mqUserId) { CredentialExitResult result = null; // Attempt to get the server credentials for the given mq user id final Credentials credentials = credentialsMap.get(mqUserId.trim()); if ( credentials == null) { // No entry has been found so return no mapping found with no credentials result = new CredentialExitResult(CredentialExitResultCode.NO_MAPPING_FOUND, null); } else { // Some credentials have been found so return success to the user along with the credentials result = new CredentialExitResult(CredentialExitResultCode.USER_SUCCESSFULLY_MAPPED, credentials); } return result; } /* (non-Javadoc) * @see com.ibm.wmqfte.exitroutine.api.ProtocolBridgeCredentialExit#shutdown(java.util.Map) */ public void shutdown(Map<String, String> bridgeProperties) { // Nothing to do in this method because there are no resources that need to be released } }