001: /*
002: * CoadunationLib: The coaduntion implementation library.
003: * Copyright (C) 2006 Rift IT Contracting
004: *
005: * This library is free software; you can redistribute it and/or
006: * modify it under the terms of the GNU Lesser General Public
007: * License as published by the Free Software Foundation; either
008: * version 2.1 of the License, or (at your option) any later version.
009: *
010: * This library is distributed in the hope that it will be useful,
011: * but WITHOUT ANY WARRANTY; without even the implied warranty of
012: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
013: * Lesser General Public License for more details.
014: *
015: * You should have received a copy of the GNU Lesser General Public
016: * License along with this library; if not, write to the Free Software
017: * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
018: *
019: * LoginManager.java
020: *
021: * This class is responsible for managing the login requests initiated by users.
022: */
023:
024: // the package path
025: package com.rift.coad.lib.security.login;
026:
027: // java imports
028: import java.util.Vector;
029:
030: // logging import
031: import org.apache.log4j.Logger;
032:
033: // coadunation imports
034: import com.rift.coad.lib.configuration.Configuration;
035: import com.rift.coad.lib.configuration.ConfigurationFactory;
036: import com.rift.coad.lib.security.UserSession;
037: import com.rift.coad.lib.security.user.UserSessionManager;
038: import com.rift.coad.lib.security.user.UserStoreManager;
039:
040: /**
041: * This class is responsible for managing the login requests initiated by users.
042: *
043: * @author Brett Chaldecott
044: */
045: public class LoginManager {
046:
047: // class constants
048: private final static String SESSION_TIMEOUT = "session_timeout";
049:
050: // singleton variables
051: private static LoginManager singleton = null;
052:
053: // private member variables
054: private Logger log = Logger.getLogger(LoginManager.class.getName());
055: private Configuration config = null;
056: private UserSessionManager sessionManager = null;
057: private UserStoreManager userStoreManager = null;
058: private long sessionTimeout = 0;
059:
060: /**
061: * Creates a new instance of LoginManager
062: *
063: * @param sessionManager The reference to the session manager.
064: * @param userStoreManager The reference to the user store manager object.
065: */
066: private LoginManager(UserSessionManager sessionManager,
067: UserStoreManager userStoreManager) throws LoginException {
068: try {
069: config = ConfigurationFactory.getInstance().getConfig(
070: this .getClass());
071: this .sessionManager = sessionManager;
072: this .userStoreManager = userStoreManager;
073: sessionTimeout = config.getLong(SESSION_TIMEOUT);
074: } catch (Exception ex) {
075: throw new LoginException(
076: "Failed to instanciate the login manager : "
077: + ex.getMessage(), ex);
078: }
079: }
080:
081: /**
082: * This method will instanicate a new login manager.
083: *
084: * @param sessionManager A reference to the user session manager.
085: * @param userStoreManager The user store manager information.
086: * @exception LoginException
087: */
088: public synchronized static void init(
089: UserSessionManager sessionManager,
090: UserStoreManager userStoreManager) throws LoginException {
091: if (singleton == null) {
092: singleton = new LoginManager(sessionManager,
093: userStoreManager);
094: }
095: }
096:
097: /**
098: * This method retrieve a reference to the Login manager singleton.
099: *
100: * @return The reference to the login manager.
101: * @exception LoginException
102: */
103: public synchronized static LoginManager getInstance()
104: throws LoginException {
105: if (singleton == null) {
106: throw new LoginException(
107: "The Login Manager has not been initialized");
108: }
109: return singleton;
110: }
111:
112: /**
113: * This method will perform the authentication request on behalf of a user.
114: *
115: * @return A reference to the user session.
116: * @param infoHandler The information necessary for the login request.
117: * @exception LoginException
118: */
119: protected UserSession authenticate(LoginInfoHandler infoHandler)
120: throws LoginException {
121: try {
122: Vector handlerList = userStoreManager
123: .getLoginHandlers(infoHandler.getAuthType());
124: for (int i = 0; i < handlerList.size(); i++) {
125: LoginHandler loginHandler = (LoginHandler) handlerList
126: .get(i);
127: if (loginHandler.login(infoHandler)) {
128: UserSession userSession = loginHandler
129: .getUserInfo();
130: userSession.setExpiryTime(sessionTimeout);
131: // We add the user session and do not init it
132: // as the init method over rides the current thread session.
133: sessionManager.addUserSession(userSession);
134: return userSession;
135: }
136: }
137: throw new AuthenticationException(
138: "Failed to authenticate user");
139: } catch (AuthenticationException ex) {
140: throw ex;
141: } catch (Exception ex) {
142: throw new LoginException(
143: "Failed to authenticate the user : "
144: + ex.getMessage(), ex);
145: }
146: }
147: }
|