示例:定制传播令牌登录模块

此示例显示如何确定登录是初始登录还是传播登录。

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

	public boolean login() throws LoginException 
	{
		// (For more information on what to do during login, see
     // Developing custom login modules for a system login configuration for JAAS.)

				// 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");
			}
		}

				// Note: 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
     // Developing custom login modules for a system login configuration for JAAS.
					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;

}

指示主题类型的图标 参考主题



时间戳记图标 最近一次更新时间: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=xsec_custprotokenlmodule
文件名:xsec_custprotokenlmodule.html