+

Search Tips   |   Advanced Search

 

Example: Custom propagation token login module

 

This example shows how to determine if the login is an initial login or a propagation login.

public customLoginModule() 
{
  public void initialize(Subject subject, CallbackHandler callbackHandler, 
         Map sharedState, Map options) 
  {
    // (For more information on what to do during initialization, see 
     // Custom login module development for a system login configuration.)
  }

  public boolean login() throws LoginException 
  {
    // (For more information on what to do during login, see 
     // Custom login module development for a system login configuration.)

    // Handles the WSTokenHolderCallback to see if this is an initial
     // or propagation login.
    Callback callbacks[] = new Callback[1];
    callbacks[0] = new WSTokenHolderCallback("Authz Token List: ");
          
    try
    {
      callbackHandler.handle(callbacks);
    } 
    catch (Exception e)
    {
      // handle exception
    } 
            
    // Receives the ArrayList of TokenHolder objects (the serialized tokens)
    List authzTokenList = ((WSTokenHolderCallback) callbacks[0]).getTokenHolderList();
        
    if (authzTokenList != null)
    {
      // Iterates through the list looking for your custom token
      for (int i=0; i<authzTokenList.size(); i++)
      {
        TokenHolder tokenHolder = (TokenHolder)authzTokenList.get(i);

        // Looks for the name and version of your custom PropagationToken implementation
        if (tokenHolder.getName().equals("
              com.ibm.websphere.security.token.CustomPropagationTokenImpl") &&
            tokenHolder.getVersion() == 1)
        {
          // Passes the bytes into your custom PropagationToken constructor 
            //  to deserialize
          customPropToken = new                   
            com.ibm.websphere.security.token.CustomPropagationTokenImpl(tokenHolder.
                  getBytes());

        }
      }
    }
    else // This is not a propagation login. Create a new instance of 
          // your PropagationToken implementation
    {
      // Adds a new custom propagation token. This is an initial login 
      customPropToken = new com.ibm.websphere.security.token.CustomPropagationTokenImpl();

      // Adds any initial attributes
      if (customPropToken != null)
      {
        customPropToken.addAttribute("key1", "value1");
        customPropToken.addAttribute("key1", "value2");
        customPropToken.addAttribute("key2", "value1");
        customPropToken.addAttribute("key3", "something different");
      }
    }

    //

You can add the token to the thread during commit in case // something happens during the login. } public boolean commit() throws LoginException { // For more information on what to do during commit, see // Custom login module development for a system login configuration if (customPropToken != null) { // Sets the propagation token on the thread try { System.out.println(tc, "*** ADDED MY CUSTOM PROPAGATION TOKEN TO THE THREAD ***"); // Prints out the values in the deserialized propagation token java.util.Enumeration keys = customPropToken.getAttributeNames(); while (keys.hasMoreElements()) { String key = (String) keys.nextElement(); String[] list = (String[]) customPropToken.getAttributes(key); for (int k=0; k<list.length; k++) System.out.println("Key/Value: " + key + "/" + list[k]); } // This sets it on the thread using getName() + getVersion() as the key com.ibm.wsspi.security.token.WSSecurityPropagationHelper.addPropagationToken( customPropToken); } catch (Exception e) { // Handles exception } // Now you can verify that you have set it properly by trying to get // it back from the thread and print the values. try { // This gets the PropagationToken from the thread using getName() // and getVersion() parameters. com.ibm.wsspi.security.token.PropagationToken tempPropagationToken = com.ibm.wsspi.security.token.WSSecurityPropagationHelper.getPropagationToken ("com.ibm.websphere.security.token.CustomPropagationTokenImpl", 1); if (tempPropagationToken != null) { System.out.println(tc, "*** RECEIVED MY CUSTOM PROPAGATION TOKEN FROM THE THREAD ***"); // Prints out the values in the deserialized propagation token java.util.Enumeration keys = tempPropagationToken.getAttributeNames(); while (keys.hasMoreElements()) { String key = (String) keys.nextElement(); String[] list = (String[]) tempPropagationToken.getAttributes(key); for (int k=0; k<list.length; k++) System.out.println("Key/Value: " + key + "/" + list[k]); } } } catch (Exception e) { // Handles exception } } } // Defines your login module variables com.ibm.wsspi.security.token.PropagationToken customPropToken = null; }




 

Related tasks


Implementing a custom propagation token

 

Related Reference


Custom login module development for a system login configuration

 

Reference topic