Getting Exception in Custom IdentityLoginModule code
pvapparao Sep 25, 2007 8:20 AMHi 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.
