[Yanel-commits] rev 41929 - public/yanel/trunk/src/webapp/src/java/org/wyona/yanel/servlet/security/impl

michi at wyona.com michi at wyona.com
Fri Mar 13 10:31:24 CET 2009


Author: michi
Date: 2009-03-13 10:31:24 +0100 (Fri, 13 Mar 2009)
New Revision: 41929

Modified:
   public/yanel/trunk/src/webapp/src/java/org/wyona/yanel/servlet/security/impl/DefaultWebAuthenticatorImpl.java
Log:
set cookie if the login type and name shall be remembered

Modified: public/yanel/trunk/src/webapp/src/java/org/wyona/yanel/servlet/security/impl/DefaultWebAuthenticatorImpl.java
===================================================================
--- public/yanel/trunk/src/webapp/src/java/org/wyona/yanel/servlet/security/impl/DefaultWebAuthenticatorImpl.java	2009-03-13 09:11:37 UTC (rev 41928)
+++ public/yanel/trunk/src/webapp/src/java/org/wyona/yanel/servlet/security/impl/DefaultWebAuthenticatorImpl.java	2009-03-13 09:31:24 UTC (rev 41929)
@@ -13,6 +13,7 @@
 import org.wyona.security.core.api.UserManager;
 
 import javax.servlet.ServletException;
+import javax.servlet.http.Cookie;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import javax.servlet.http.HttpSession;
@@ -81,16 +82,16 @@
             String path = map.getPath(realm, request.getServletPath());
             //Realm realm = map.getRealm(new Path(request.getServletPath()));
             if (log.isDebugEnabled()) log.debug("Generic WebAuthenticator called for realm path " + path);
+            HttpSession session = request.getSession(true);
 
 
 
-
             // HTML Form based authentication
             String loginUsername = request.getParameter("yanel.login.username");
             String openID = request.getParameter("yanel.login.openid");
             String openIDSignature = request.getParameter("openid.sig");
+            boolean rememberMyLoginName = doRememberMyLoginName(request, response, loginUsername, openID);
             if(loginUsername != null) {
-                HttpSession session = request.getSession(true);
                 try {
                     User user = realm.getIdentityManager().getUserManager().getUser(loginUsername, true);
                     if (user != null && user.authenticate(request.getParameter("yanel.login.password"))) {
@@ -144,10 +145,10 @@
                         }
                         User user = uManager.getUser(openIdentity);
                         //User user = uManager.getUser(openIdentity, true);
-                        IdentityMap identityMap = (IdentityMap)request.getSession(true).getAttribute(YanelServlet.IDENTITY_MAP_KEY);
+                        IdentityMap identityMap = (IdentityMap)session.getAttribute(YanelServlet.IDENTITY_MAP_KEY);
                         if (identityMap == null) {
                             identityMap = new IdentityMap();
-                            request.getSession().setAttribute(YanelServlet.IDENTITY_MAP_KEY, identityMap);
+                            session.setAttribute(YanelServlet.IDENTITY_MAP_KEY, identityMap);
                         }
                         log.debug("User: " + user.getID());
                         identityMap.put(realm.getID(), new Identity(user));
@@ -166,6 +167,9 @@
                 if (log.isDebugEnabled()) log.debug("No form based authentication request.");
             }
 
+
+
+
             // Check for Neutron-Auth based authentication
             String yanelUsecase = request.getParameter("yanel.usecase");
             if(yanelUsecase != null && yanelUsecase.equals("neutron-auth")) {
@@ -199,7 +203,6 @@
                 log.debug("Username: " + username);
 
                 if (username != null) {
-                    HttpSession session = request.getSession(true);
                     log.debug("Realm ID: " + realm.getID());
                     User user = realm.getIdentityManager().getUserManager().getUser(username, true);
                     if (user != null && user.authenticate(password)) {
@@ -557,4 +560,32 @@
         }
         return null;
     }
+
+    /**
+     * Handle "remember my login"
+     */
+    private boolean doRememberMyLoginName(HttpServletRequest request, HttpServletResponse response, String loginUsername, String openID) {
+        boolean rememberMyLoginName = false;
+        if (request.getParameter("remember-my-login-name") != null) {
+                log.info("Remember my login name: " + loginUsername + "," + openID);
+                rememberMyLoginName = true;
+                Cookie rememberLoginNameCookie = null;
+                if (loginUsername != null) {
+                    rememberLoginNameCookie = new Cookie("_yanel-login-default", loginUsername);
+                } else if (openID != null) {
+                    rememberLoginNameCookie = new Cookie("_yanel-login-openid", openID);
+                } else {
+                    log.warn("Neither default nor OpenID login!");
+                }
+                if (rememberLoginNameCookie != null) {
+		    rememberLoginNameCookie.setMaxAge(86400); // 1 day is 86400 seconds
+                    response.addCookie(rememberLoginNameCookie);
+                }
+        } else {
+                log.info("Do not remember my login name: " + loginUsername + "," + openID);
+                rememberMyLoginName = false;
+                // TODO: Unset Cookie ...
+        }
+        return rememberMyLoginName;
+    }
 }



More information about the Yanel-commits mailing list