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
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
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
48 userManager.init(context, config);
49
50
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 }