[jboss-user] [JBoss Portal] - Getting Exception in Custom IdentityLoginModule code

PVApparao do-not-reply at jboss.com
Tue Sep 25 08:20:54 EDT 2007


Hi I am new to this jboss-portal,

Currently I am working on migrating already existing portal developed with jboss-portal2.4  to jboss-portal2.6.1.

My portal is using a custom login module which extends IdentityLoginModule, as lot of changes happend to the Jboss portal Identity api in jboss-portal2.6.1 , I changed the existing code with the new api changes.

This is My Code 

public class SsoLoginModule extends IdentityLoginModule

{

  private static final Logger logger = Logger.getLogger(SsoLoginModule.class);

 private static final String DEFAULT_USER_ROLE = "User";

 private static final String JNDI_TRANS_MGR = "java:/TransactionManager";

  private static final String POLICY_CONTEXT_HTTP_SERVLET =

                              "javax.servlet.http.HttpServletRequest";

  private static final String OPTION_NAME_DEFAULT_ROLE = "defaultRole";

  private static final String OPTION_NAME_ROLE_MOD_JNDI = "roleModuleJNDIName";

 // public static final short UNDEFINED_TIMEZONE = (short)0;

 

  protected String defaultRoleForNewUser = DEFAULT_USER_ROLE;

   protected String userModuleJNDIName;

 

   protected String roleModuleJNDIName;

 

   protected String userProfileModuleJNDIName;

 

   protected String membershipModuleJNDIName;

  

  private UserModule userModule;

 

   private RoleModule roleModule;

 

   private UserProfileModule userProfileModule;

 

   private MembershipModule membershipModule;

   

    private Transaction transaction;

  private SessionFactory identitySessionFactory;

  private boolean success = false;

  private Session session;

 

  /**

   * Initialize the login module.

   * @param subject Authentication subject

   * @param callbackHandler Callback handler for the login module

   * @param sharedState Shared State Map

   * @param options Configuration options of the login module

   */

  public void initialize(Subject subject, CallbackHandler callbackHandler,

                         Map sharedState, Map options) {

            super.initialize(subject, callbackHandler, sharedState, options);

            logger.info("Initializing login module.");

    String specifiedDefaultRole=(String)options.get(OPTION_NAME_DEFAULT_ROLE);

    if (!isNullOrEmpty(specifiedDefaultRole)) {

      defaultRoleForNewUser = specifiedDefaultRole;

    }

     userModuleJNDIName = (String) options.get("userModuleJNDIName");

      roleModuleJNDIName = (String) options.get("roleModuleJNDIName");

      userProfileModuleJNDIName = (String) options

            .get("userProfileModuleJNDIName");

      membershipModuleJNDIName = (String) options

            .get("membershipModuleJNDIName");

    logger.info("User module JNDI = "+userModuleJNDIName);            

    logger.info("Role module JNDI = "+roleModuleJNDIName);

    logger.info("UserProfile module JNDI = "+userProfileModuleJNDIName);

    logger.info("Membership module JNDI = "+membershipModuleJNDIName);

    logger.info("Exit Initialize()");

  }

 

  /**

   * Perform log in process.

   */

  public boolean login() throws LoginException {

            logger.info("Inside login.");

    createUserIfNew();

    logger.info("About to exit login().");

    return super.login();

  }

 

  /**

   * Create user if user does not exist.

   */

  protected void createUserIfNew() throws LoginException {

    try {

            logger.info("Inside createUserIfNew.");

      TransactionManager tm = (TransactionManager)

               new InitialContext().lookup(JNDI_TRANS_MGR);

      Transactions.required(tm, new Transactions.Runnable()

      {

        public Object run() throws Exception {

             String username = null;

                User user = null;

         try {

                username = (getUsernameAndPassword())[0];

            logger.info("Username = " + username);

                

            logger.info("Before getting user from UserModule."); 

                try{  

            user = getUserModule().findUserByUserName(username);

                 }catch(NullPointerException ne){

                      // in case module implementation doesn't throw proper

                  // exception...

                  if (user == null)

                  {

                     throw new NoSuchUserException("UserModule returned null user object");  

                  }

                }

            logger.info("User ID in the table jbp_users ="+user.getId().toString());

            fillContextWithUserProfile(getUserProfileModule(), user);

              

            return null;

          }

          catch(NoSuchUserException nsue) {

           try{

               // User not found, let's create it

            logger.info("Create new user " + username);

           // HttpServletRequest request = getHttpServletRequest();

               HttpServletRequest request = getHttpServletRequest();

            logger.info(request.getHeader(Constant.SSO_UID)+","+

                                    request.getHeader(Constant.SSO_GESSOUID));

                logger.info("Just about to create User");           

                        //identitySessionFactory = (SessionFactory)new InitialContext().lookup("java:/portal/IdentitySessionFactory");

                        //session = identitySessionFactory.openSession();

                //transaction = session.beginTransaction();          

            user = userModule.createUser(

                              request.getHeader(Constant.SSO_UID),"Pa55word");

            //                              request.getHeader(Constant.SSO_EMAIL));

            logger.info("User object is ="+user);

                logger.info("User created successfully");

                if(null == userProfileModule) {

                        userProfileModule = getUserProfileModule();

                        

                }

            fillContextWithUserProfile(userProfileModule, user);

                

                    Set roleSet = new HashSet();

                        Role role = getRoleModule().findRoleByName(defaultRoleForNewUser);

                if (role != null)

               {        

            roleSet.add(role);

                getMembershipModule().assignRoles(user, roleSet);      

                }

                }

                catch (IllegalArgumentException e)

         {

            logger.error("Cannot create user " + username, e);

         }

                catch(IdentityException ie){

               logger.error("Cannot create user " + username, ie);

                }

               

            return null;

          }

          catch (Exception e) {

            e.printStackTrace();

            throw new LoginException("Error in find/create user: " +

                                     e.getMessage());

          }

              

              

        }

      });

    }

    catch (Exception e) {

      Throwable cause = e.getCause();

      e.printStackTrace();

      throw new LoginException(cause.toString());

    }

    

    logger.info("Exit CreateUserIfNew()");

  }

 

  protected UserModule getUserModule() throws NamingException

   {

      logger.info("Enter getUserModule()");

      if (userModule == null)

      {

         userModule = (UserModule)new InitialContext().lookup(userModuleJNDIName);

      }

      logger.info("Exit getUserModule()");

      return userModule;

   }

 

   protected RoleModule getRoleModule() throws NamingException

   {

      logger.info("Enter getRoleModule()");

      if (roleModule == null)

      {

         roleModule = (RoleModule)new InitialContext().lookup(roleModuleJNDIName);

      }

      logger.info("Enter getRoleModule()");

      return roleModule;

   }

 

   protected UserProfileModule getUserProfileModule() throws NamingException

   {

      logger.info("Enter getUserProfileModule()");

      if (userProfileModule == null) {

         userProfileModule = (UserProfileModule) new InitialContext()

               .lookup(userProfileModuleJNDIName);

      }

      logger.info("Enter getUserProfileModule()");

      return userProfileModule;

   }

 

   protected MembershipModule getMembershipModule() throws NamingException

   {

      logger.info("Enter getMembershipModule()");

      if (membershipModule == null)

      {

         membershipModule = (MembershipModule)new InitialContext().lookup(membershipModuleJNDIName);

      }

      logger.info("Enter getMemgershipModule()");

      return membershipModule;

   }

 

 

  /**

   * Validate if password is valid.  Always return true.

   * @param inputPassword Input password

   * @param expectedPassword Expected password

   * @return true

   */

  protected boolean validatePassword(String inputPassword,

                     String expectedPassword) {

    logger.info("returning from validatePassword.");

    boolean b = super.validatePassword(inputPassword, expectedPassword);

    logger.info("Login OK?="+b);

              return true;

  }

 

  /**

   * Get the current HTTP request object.

   * @return current HttpServletRequest object

   * @throws PolicyContextException if error in retrieving the request object

   */

  protected HttpServletRequest getHttpServletRequest()

            throws PolicyContextException {

    return (HttpServletRequest) 

           PolicyContext.getContext(POLICY_CONTEXT_HTTP_SERVLET);

  }

 

  /**

   * Check if a String is null, or empty.

   * @param string String to be checked

   */

  protected static boolean isNullOrEmpty(String string) {

    if (string == null || "".equals(string.trim())) {

      return true;

    }

    return false;

  }

 

  private void fillContextWithUserProfile(UserProfileModule userProfile, 

      User user) throws Exception {

        logger.info("Enter fillContextWithUserProfile()");

            HttpServletRequest request = getHttpServletRequest();

            DelegateContext ctx = new DelegateContext();

            ctx.put("userid", user.getId().toString());

        ctx.put("GIVENNAME", request.getHeader(Constant.SSO_FIRST_NAME));

        ctx.put("FAMILYNAME", request.getHeader(Constant.SSO_LAST_NAME));

        ctx.put("REALEMAIL", request.getHeader(Constant.SSO_EMAIL));

        ctx.put("LOCATION", request.getHeader(Constant.SSO_COUNTRY));

            Locale locale = request.getLocale();

            LocalizedString localizedString = new LocalizedString(locale);

             logger.info("###########The Locale Value is --------------------> " + localizedString.getString(locale,true));

            if ( null != localizedString.getString(locale,true)){

                         putNonEmptyProperty(userProfile, user, User.INFO_USER_LOCALE,  localizedString.getString(locale,true));

             }

        putNonEmptyProperty(userProfile, user, Constant.INFO_USER_TIME_ZONE_OFFSET, 

                                Constant.DEFAULT_TIME_ZONE);

         logger.info ("Exit fillContextWithUserProfile()");                                            

   } 

 

  /**

   * Add key value pairs properties into User object.

   * @param user User object

   * @param key Key of property

   * @param value Value of property

   */

  private void putNonEmptyProperty(UserProfileModule userProfileModule, User user, String key, String value) {

    logger.info("Enter putNonEmptyProperty()");

    if ((value != null) && (value.trim().length() != 0)) {

            try{

                        userProfileModule.setProperty(user, key, value);

            }catch(IdentityException Ie){

                        Ie.printStackTrace();

            }

    }

    logger.info("Exit putNonEmptyProperty()");

  }

 

}  // end of class







I am getting these log messages  when i tried to login to the portal



Initializing login module.

User module JNDI = java:/portal/UserModule

Role module JNDI = java:/portal/RoleModule

UserProfile module JNDI = java:/portal/UserProfileModule

Membership module JNDI = java:/portal/MembershipModule

Exit Initialize()

Inside login.

Inside createUserIfNew.

Username = 501157612

Before getting user from UserModule.

Enter getUserModule()

Exit getUserModule()

Create new user 501157612

501157612,80C398B9-8DE3-163B-AC22-0003BA1BAD40

Just about to create User

org.jboss.portal.common.transaction.NestedException: java.lang.NullPointerException

at org.jboss.portal.common.transaction.Transactions.apply(Transactions.java:253)

at org.jboss.portal.common.transaction.Transactions.required(Transactions.java:289)

at com.ge.health.jboss.portal.security.jaas.SsoLoginModule.createUserIfNew(Unknown Source)

I knew nothing about this exception, I was not able to move further, can any one help me to sortout this issue.



View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4088383#4088383

Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4088383



More information about the jboss-user mailing list