|
Author: jleroux
Date: Sat Jan 5 12:40:13 2013 New Revision: 1429273 URL: http://svn.apache.org/viewvc?rev=1429273&view=rev Log: A sightly modified patch from Raghavendra Prakash for "In version 10.04 - After clicking on lookup, display login page again" https://issues.apache.org/jira/browse/OFBIZ-4937 Step 1: Login - https://localhost:8443/catalog/control/main; Login with credentials Step 2: Now, select Category lookup; Lookup popup appears; Just get rid of the popup Step 3: Next, select 'Party' menu item from application tab; You will see the login page again. Cause: externalKey becomes stale. I have fixed the issue with a small work around: externalLoginKeysWR - contains the userLogin for externalLoginKey from app-level tabs Logic behind: The userlogin could not be found for the external key after the lookup request handled by OFBiz. The external key with app level tabs become stale once the lookup request is handled, and userlogin was removed for app level tabs' external keys. As a work around, this fastmap still maitains association with that external key. When the userlogin could not be found with external key, it would be searched in this fastmap. This is accomplished in checkExternalLoginKey and getExternalLoginKey methods jleroux; After testing, I cleaned Raghavendra's contribution. It's maybe not the best way, but it works. Modified: ofbiz/branches/release10.04/framework/webapp/src/org/ofbiz/webapp/control/LoginWorker.java Modified: ofbiz/branches/release10.04/framework/webapp/src/org/ofbiz/webapp/control/LoginWorker.java URL: http://svn.apache.org/viewvc/ofbiz/branches/release10.04/framework/webapp/src/org/ofbiz/webapp/control/LoginWorker.java?rev=1429273&r1=1429272&r2=1429273&view=diff ============================================================================== --- ofbiz/branches/release10.04/framework/webapp/src/org/ofbiz/webapp/control/LoginWorker.java (original) +++ ofbiz/branches/release10.04/framework/webapp/src/org/ofbiz/webapp/control/LoginWorker.java Sat Jan 5 12:40:13 2013 @@ -84,6 +84,8 @@ public class LoginWorker { /** This Map is keyed by the randomly generated externalLoginKey and the value is a UserLogin GenericValue object */ public static Map<String, GenericValue> externalLoginKeys = FastMap.newInstance(); + // This fast map is added as work around for repeated login issue + public static Map<String, GenericValue> externalLoginKeysWR = FastMap.newInstance(); public static StringWrapper makeLoginUrl(PageContext pageContext) { return makeLoginUrl(pageContext, "checkLogin"); @@ -130,6 +132,8 @@ public class LoginWorker { // if the session has a previous key in place, remove it from the master list String sesExtKey = (String) session.getAttribute(EXTERNAL_LOGIN_KEY_ATTR); if (sesExtKey != null) { + // Work around for repeated login issue + externalLoginKeysWR.put(sesExtKey, userLogin); externalLoginKeys.remove(sesExtKey); } @@ -152,6 +156,7 @@ public class LoginWorker { String sesExtKey = (String) session.getAttribute(EXTERNAL_LOGIN_KEY_ATTR); if (sesExtKey != null) { externalLoginKeys.remove(sesExtKey); + externalLoginKeysWR.remove(sesExtKey); } } @@ -522,6 +527,7 @@ public class LoginWorker { public static void doBasicLogin(GenericValue userLogin, HttpServletRequest request) { HttpSession session = request.getSession(); session.setAttribute("userLogin", userLogin); + request.setAttribute("userLogin", userLogin); String javaScriptEnabled = null; try { @@ -925,6 +931,11 @@ public class LoginWorker { if (externalKey == null) return "success"; GenericValue userLogin = (GenericValue) LoginWorker.externalLoginKeys.get(externalKey); + // Work around for repeated login issue + if (userLogin == null) { + userLogin = (GenericValue) LoginWorker.externalLoginKeysWR.get(externalKey); + externalLoginKeysWR.remove(externalKey); + } if (userLogin != null) { //to check it's the right tenant //in case username and password are the same in different tenants |
| Free forum by Nabble | Edit this page |
