Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * JBoss, Home of Professional Open Source.
   * Copyright 2006, Red Hat Middleware LLC, and individual contributors
   * as indicated by the @author tags. See the copyright.txt file in the
   * distribution for a full listing of individual contributors.
   *
   * This is free software; you can redistribute it and/or modify it
   * under the terms of the GNU Lesser General Public License as
   * published by the Free Software Foundation; either version 2.1 of
  * the License, or (at your option) any later version.
  *
  * This software is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  * Lesser General Public License for more details.
  *
  * You should have received a copy of the GNU Lesser General Public
  * License along with this software; if not, write to the Free
  * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
  * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
  */
 package org.jboss.resource.security;
 
 import java.util.Map;
 import java.util.Set;
 
 import  javax.resource.spi.security.PasswordCredential;
 
 import  org.jboss.logging.Logger;
A simple login module that simply associates the principal making the connection request with the actual EIS connection requirements. The type of Principal class used is org.jboss.security.SimplePrincipal.

Author(s):
Scott.Stark@jboss.org
David Jencks
Dan Bunker
Version:
$Revision: 71545 $
See also:
org.jboss.resource.security.ConfiguredIdentityLoginModule
 
 
 @SuppressWarnings("unchecked")
 {
   
Class logger
 
    private static final Logger log = Logger.getLogger(CallerIdentityLoginModule.class);
 
    private boolean trace = .isTraceEnabled();
   
   
The default username/principal to use for basic connections
 
    private String userName;

   
The default password to use for basic connections
 
    private char[] password;
   
A flag indicating if the run-as principal roles should be added to the subject
 
    private boolean addRunAsRoles;
    private Set runAsRoles;

   
Default Constructor
 
    public CallerIdentityLoginModule()
    {
    }

   
The initialize method sets up some default connection information for basic connections. This is useful for container initialization connection use or running the application in a non-secure manner. This method is called before the login method.

Parameters:
subject
handler
sharedState
options
 
    public void initialize(Subject subjectCallbackHandler handler,
       Map sharedStateMap options)
    {
       super.initialize(subjecthandlersharedStateoptions);
       = (Stringoptions.get("userName");
      if ( == null)
      {
         .debug("No default username supplied.");
      }
      String pass = (Stringoptions.get("password");
      if (pass == null)
      {
         .debug("No default password supplied.");
      }
      else
      {
          = pass.toCharArray();
      }
      // Check the addRunAsRoles
      String flag = (Stringoptions.get("addRunAsRoles");
       = Boolean.valueOf(flag).booleanValue();
      .debug("got default principal: " +  + ", username: "
         +  + ", password: " + ( == null ? "null" : "****")
         + " addRunAsRoles: "+);
   }

   
Performs the login association between the caller and the resource for a 1 to 1 mapping. This acts as a login propagation strategy and is useful for single-sign on requirements

Returns:
True if authentication succeeds
Throws:
LoginException
   public boolean login() throws LoginException
   {
      if()
         .trace("Caller Association login called");
      //setup to use the default connection info.  This will be overiden if security
      //associations are found
      String username = ;
      //ask the security association class for the principal info making this request
      try
      {
         Principal user = GetPrincipalInfoAction.getPrincipal();
         char[] userPassword = GetPrincipalInfoAction.getCredential();
         ifuserPassword != null )
         {
             = userPassword;
         }
         if (user != null)
         {
            username = user.getName();
            if ()
            {
               .trace("Current Calling principal is: " + username
                  + " ThreadName: " + Thread.currentThread().getName());
            }
            // Check for a RunAsIdentity
            RunAsIdentity runAs = GetPrincipalInfoAction.peekRunAsIdentity();
            ifrunAs != null )
            {
                = runAs.getRunAsRoles();
            }
         }
      }
      catch (Throwable e)
      {
         throw new LoginException("Unable to get the calling principal or its credentials for resource association");
      }
      // Update userName so that getIdentity is consistent
       = username;
      if (super.login() == true)
      {
         return true;
      }
      // Put the principal name into the sharedState map
      sharedState.put("javax.security.auth.login.name"username);
      super. = true;
      return true;
   }
   public boolean commit() throws LoginException
   {
      // Put the principal name into the sharedState map
      sharedState.put("javax.security.auth.login.name");
      // Add any run-as roles if addRunAsRoles is true
      if &&  != null )
      {
         SubjectActions.addRoles(subject, );         
      }
      // Add the PasswordCredential
      PasswordCredential cred = new PasswordCredential();
      cred.setManagedConnectionFactory(getMcf());
      SubjectActions.addCredentials(subject, cred);
      return super.commit();
   }
   protected Principal getIdentity()
   {
      if()
         .trace("getIdentity called");
      Principal principal = new SimplePrincipal();
      return principal;
   }
   protected Group[] getRoleSets() throws LoginException
   {
      if()
         .trace("getRoleSets called");
      return new Group[]{};
   }
New to GrepCode? Check out our FAQ X