View Javadoc

1   package org.restafarian.core.security;
2   
3   import javax.servlet.ServletContext;
4   import javax.servlet.http.HttpServletRequest;
5   import javax.servlet.http.HttpServletResponse;
6   
7   import org.apache.commons.configuration.Configuration;
8   import org.apache.commons.lang.StringUtils;
9   import org.apache.commons.logging.Log;
10  import org.apache.commons.logging.LogFactory;
11  import org.restafarian.core.beans.Person;
12  
13  /***
14   * <p>This module finds and returns the currently authenticated user.</p>
15   */
16  public class AuthenticatedUserManager {
17  	private static Log log = LogFactory.getLog(AuthenticatedUserManager.class);
18  
19  	/***
20  	 * <p>Initializes the module using the configuration.</p>
21  	 *
22  	 * @param context the <code>ServletContext</code> object
23  	 * @param config the <code>Configuration</code> object
24  	 */
25  	public static void init(ServletContext context, Configuration config) {
26  		log.info("Initializing the AuthenticatedUserManager.");
27  
28  		// get the implentation class name from the configuration
29  		String className = config.getString("authenticatedUserManager");
30  		if (StringUtils.isNotEmpty(className)) {
31  			log.info("Implementation class name: " + className);
32  		} else {
33  			className = "org.restafarian.core.utils.DefaultUserManager";
34  			log.info("No user manager class name specified; configuring default user manager.");
35  		}
36  
37  		// instantiate the class
38  		UserManager userManager = null;
39  		try {
40  			userManager = (UserManager) Class.forName(className).newInstance();
41  		} catch (Exception e) {
42  			log.info("Exception occured instantiating user manager: " + e, e);
43  			log.info("Configuring default user manager.");
44  			userManager = new DefaultUserManager();
45  		}
46  
47  		// initialize the instantiated class
48  		userManager.init(context, config);
49  
50  		// store the initialized module in the servlet context
51  		context.setAttribute("authenticatedUserManager", userManager);
52  	}
53  
54  	/***
55  	 * <p>Returns the currently authenticated user, or null, if there is
56  	 * no user currently authenticated.</p>
57  	 *
58  	 * @param req the <code>HttpServletRequest</code> object
59  	 * @return user the currently authenticated user
60  	 */
61  	public static Person getAuthenticatedUser(HttpServletRequest req) {
62  		ServletContext context = req.getSession().getServletContext();
63  		UserManager userManager = (UserManager) context.getAttribute("authenticatedUserManager");
64  		if (userManager == null) {
65  			userManager = new DefaultUserManager();
66  			if (log.isDebugEnabled()) {
67  				log.debug("No user manager configured; employing default user manager.");
68  			}
69  		}
70  		return userManager.getAuthenticatedUser(req);
71  	}
72  
73  	/***
74  	 * <p>Sets the currently authenticated user.</p>
75  	 *
76  	 * @param req the <code>HttpServletRequest</code> object
77  	 * @param res the <code>HttpServletResponse</code> object
78  	 * @param user the currently authenticated user
79  	 */
80  	public void setAuthenticatedUser(HttpServletRequest req, HttpServletResponse res, Person user) {
81  		ServletContext context = req.getSession().getServletContext();
82  		UserManager userManager = (UserManager) context.getAttribute("authenticatedUserManager");
83  		if (userManager == null) {
84  			userManager = new DefaultUserManager();
85  			if (log.isDebugEnabled()) {
86  				log.debug("No user manager configured; employing default user manager.");
87  			}
88  		}
89  		userManager.setAuthenticatedUser(req, res, user);
90  	}
91  }