Author: shijh
Date: Wed Sep 2 09:09:45 2015 New Revision: 1700739 URL: http://svn.apache.org/r1700739 Log: OFBIZ-6596 The Solr redirection does not work in trunk demo. 1. Use response.sendRedirect to forward url to login page instead of the response.setHeader("location", url), this avoids the warning messages from EntityUtilProperties. Besides, when testing in similar config as demo-ofbiz-trunk is (port 80 -> 8080, port 443 -> 8443), this change can keep the url to 80 or 443. 2. Replace tabs to spaces in several java files. Modified: ofbiz/trunk/specialpurpose/solr/src/org/ofbiz/solr/control/OFBizSolrLoginWorker.java ofbiz/trunk/specialpurpose/solr/src/org/ofbiz/solr/webapp/OFBizSolrContextFilter.java ofbiz/trunk/specialpurpose/solr/src/org/ofbiz/solr/webapp/OFBizSolrLoadAdminUiServlet.java ofbiz/trunk/specialpurpose/solr/src/org/ofbiz/solr/webapp/OFBizSolrRedirectServlet.java Modified: ofbiz/trunk/specialpurpose/solr/src/org/ofbiz/solr/control/OFBizSolrLoginWorker.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/specialpurpose/solr/src/org/ofbiz/solr/control/OFBizSolrLoginWorker.java?rev=1700739&r1=1700738&r2=1700739&view=diff ============================================================================== --- ofbiz/trunk/specialpurpose/solr/src/org/ofbiz/solr/control/OFBizSolrLoginWorker.java (original) +++ ofbiz/trunk/specialpurpose/solr/src/org/ofbiz/solr/control/OFBizSolrLoginWorker.java Wed Sep 2 09:09:45 2015 @@ -40,8 +40,8 @@ public class OFBizSolrLoginWorker extend * JSP should generate its own content. This allows an event to override the default content. */ public static String login(HttpServletRequest request, HttpServletResponse response) { - String result = LoginWorker.login(request, response); - if (result.equals("success")) { + String result = LoginWorker.login(request, response); + if (result.equals("success")) { // send the redirect try { response.setStatus(HttpServletResponse.SC_MOVED_TEMPORARILY); @@ -51,13 +51,13 @@ public class OFBizSolrLoginWorker extend Debug.logError(ise.getMessage(), module); return "error"; } - } - return result; + } + return result; } public static String extensionCheckLogin(HttpServletRequest request, HttpServletResponse response) { - String result = LoginWorker.extensionCheckLogin(request, response); - if (result.equals("success")) { + String result = LoginWorker.extensionCheckLogin(request, response); + if (result.equals("success")) { // send the redirect try { response.setStatus(HttpServletResponse.SC_MOVED_TEMPORARILY); @@ -67,7 +67,7 @@ public class OFBizSolrLoginWorker extend Debug.logError(ise.getMessage(), module); return "error"; } - } + } return result; } } Modified: ofbiz/trunk/specialpurpose/solr/src/org/ofbiz/solr/webapp/OFBizSolrContextFilter.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/specialpurpose/solr/src/org/ofbiz/solr/webapp/OFBizSolrContextFilter.java?rev=1700739&r1=1700738&r2=1700739&view=diff ============================================================================== --- ofbiz/trunk/specialpurpose/solr/src/org/ofbiz/solr/webapp/OFBizSolrContextFilter.java (original) +++ ofbiz/trunk/specialpurpose/solr/src/org/ofbiz/solr/webapp/OFBizSolrContextFilter.java Wed Sep 2 09:09:45 2015 @@ -82,7 +82,7 @@ public class OFBizSolrContextFilter exte * @see javax.servlet.Filter#init(javax.servlet.FilterConfig) */ public void init(FilterConfig config) throws ServletException { - super.init(config); + super.init(config); this.config = config; // puts all init-parameters in ServletContext attributes for easier parameterization without code changes @@ -169,46 +169,46 @@ public class OFBizSolrContextFilter exte } } - String servletPath = httpRequest.getServletPath(); + String servletPath = httpRequest.getServletPath(); if (UtilValidate.isNotEmpty(servletPath) && servletPath.equals("/control")) { - doControlFilter(request, response, chain); + doControlFilter(request, response, chain); // we're done checking; continue on chain.doFilter(request, response); } else { - // check if the request is from an authorized user - if (UtilValidate.isNotEmpty(servletPath) && servletPath.startsWith("/admin/")) { + // check if the request is from an authorized user + if (UtilValidate.isNotEmpty(servletPath) && servletPath.startsWith("/admin/")) { HttpSession session = httpRequest.getSession(); GenericValue userLogin = (GenericValue) session.getAttribute("userLogin"); Security security = (Security) request.getAttribute("security"); if (security == null) { - security = (Security) httpRequest.getServletContext().getAttribute("security"); - if (security != null) { + security = (Security) httpRequest.getServletContext().getAttribute("security"); + if (security != null) { request.setAttribute("security", security); - } + } } if (security == null) { - security = getSecurity(); - if (security != null) { + security = getSecurity(); + if (security != null) { request.setAttribute("security", security); - } + } } if (UtilValidate.isEmpty(userLogin) || !LoginWorker.hasBasePermission(userLogin, httpRequest)) { - response.setContentType("application/x-json"); - MapToJSON mapToJson = new MapToJSON(); - JSON json; - try { - json = mapToJson.convert(UtilMisc.toMap("ofbizLogin", (Object) "true")); - OutputStream os = response.getOutputStream(); - os.write(json.toString().getBytes()); - os.flush(); - } catch (ConversionException e) { - Debug.logError("Error while converting ofbizLogin map to JSON.", module); - } - return; - } - } - // NOTE: there's a chain.doFilter in SolrDispatchFilter's doFilter - super.doFilter(request, response, chain); + response.setContentType("application/x-json"); + MapToJSON mapToJson = new MapToJSON(); + JSON json; + try { + json = mapToJson.convert(UtilMisc.toMap("ofbizLogin", (Object) "true")); + OutputStream os = response.getOutputStream(); + os.write(json.toString().getBytes()); + os.flush(); + } catch (ConversionException e) { + Debug.logError("Error while converting ofbizLogin map to JSON.", module); + } + return; + } + } + // NOTE: there's a chain.doFilter in SolrDispatchFilter's doFilter + super.doFilter(request, response, chain); } } @@ -311,7 +311,7 @@ public class OFBizSolrContextFilter exte // get tenant delegator by domain name String serverName = httpRequest.getServerName(); try { - + // if tenant was specified, replace delegator with the new per-tenant delegator and set tenantId to session attribute Delegator delegator = getDelegator(config.getServletContext()); @@ -373,9 +373,9 @@ public class OFBizSolrContextFilter exte Debug.logWarning(e, "Unable to get Tenant", module); } } - } + } - /** + /** * @see javax.servlet.Filter#destroy() */ public void destroy() { Modified: ofbiz/trunk/specialpurpose/solr/src/org/ofbiz/solr/webapp/OFBizSolrLoadAdminUiServlet.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/specialpurpose/solr/src/org/ofbiz/solr/webapp/OFBizSolrLoadAdminUiServlet.java?rev=1700739&r1=1700738&r2=1700739&view=diff ============================================================================== --- ofbiz/trunk/specialpurpose/solr/src/org/ofbiz/solr/webapp/OFBizSolrLoadAdminUiServlet.java (original) +++ ofbiz/trunk/specialpurpose/solr/src/org/ofbiz/solr/webapp/OFBizSolrLoadAdminUiServlet.java Wed Sep 2 09:09:45 2015 @@ -44,11 +44,11 @@ public class OFBizSolrLoadAdminUiServlet @Override public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException { - boolean isForwarded = forwardUrl(request, response); - if (isForwarded) { - return; - } - + boolean isForwarded = forwardUrl(request, response); + if (isForwarded) { + return; + } + // This attribute is set by the SolrDispatchFilter CoreContainer cores = (CoreContainer) request.getAttribute("org.apache.solr.CoreContainer"); Modified: ofbiz/trunk/specialpurpose/solr/src/org/ofbiz/solr/webapp/OFBizSolrRedirectServlet.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/specialpurpose/solr/src/org/ofbiz/solr/webapp/OFBizSolrRedirectServlet.java?rev=1700739&r1=1700738&r2=1700739&view=diff ============================================================================== --- ofbiz/trunk/specialpurpose/solr/src/org/ofbiz/solr/webapp/OFBizSolrRedirectServlet.java (original) +++ ofbiz/trunk/specialpurpose/solr/src/org/ofbiz/solr/webapp/OFBizSolrRedirectServlet.java Wed Sep 2 09:09:45 2015 @@ -28,9 +28,14 @@ import javax.servlet.http.HttpSession; import org.apache.solr.servlet.RedirectServlet; import org.ofbiz.base.util.Debug; import org.ofbiz.base.util.UtilValidate; +import org.ofbiz.entity.Delegator; import org.ofbiz.entity.GenericEntityException; import org.ofbiz.entity.GenericValue; +import org.ofbiz.security.Security; +import org.ofbiz.security.SecurityConfigurationException; +import org.ofbiz.security.SecurityFactory; import org.ofbiz.webapp.OfbizUrlBuilder; +import org.ofbiz.webapp.control.LoginWorker; import org.ofbiz.webapp.control.WebAppConfigurationException; /** @@ -46,24 +51,55 @@ public class OFBizSolrRedirectServlet ex */ @Override public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { - boolean isForwarded = forwardUrl(request, response); - if (isForwarded) { - return; - } - - super.doGet(request, response); + boolean isForwarded = forwardUrl(request, response); + if (isForwarded) { + return; + } + + super.doGet(request, response); } - protected static boolean forwardUrl(HttpServletRequest request, HttpServletResponse response) throws IOException { + protected static boolean forwardUrl(HttpServletRequest request, HttpServletResponse response) throws IOException { HttpSession session = request.getSession(); GenericValue userLogin = (GenericValue) session.getAttribute("userLogin"); boolean forwardToLogin = false; if (UtilValidate.isEmpty(userLogin)) { - forwardToLogin = true; + forwardToLogin = true; + } else { + Security security = (Security) request.getAttribute("security"); + if (security == null) { + security = (Security) session.getAttribute("security"); + if (security != null) { + request.setAttribute("security", security); + } + } + if (security == null) { + security = (Security) request.getServletContext().getAttribute("security"); + if (security != null) { + request.setAttribute("security", security); + } + } + if (!LoginWorker.hasBasePermission(userLogin, request)) { + forwardToLogin = true; + } } - - // check request schema - if (forwardToLogin || !request.getScheme().equals("https")) { + + if (forwardToLogin) { + String contextPath = request.getContextPath(); + String uri = request.getRequestURI(); + if (UtilValidate.isNotEmpty(contextPath) && uri.startsWith(contextPath)) { + uri = uri.replaceFirst(request.getContextPath(), ""); + } + String servletPath = request.getServletPath(); + if (UtilValidate.isNotEmpty(servletPath) && uri.startsWith(servletPath)) { + uri = uri.replaceFirst(servletPath, ""); + } + response.sendRedirect(contextPath + "/control/checkLogin" + uri); + return true; + } + + // check request schema + if (!request.getScheme().equals("https")) { StringBuilder newURL = new StringBuilder(250); // Build the scheme and host part try { @@ -82,24 +118,7 @@ public class OFBizSolrRedirectServlet ex Debug.logError(e, "Exception thrown while writing to StringBuilder: ", module); return false; } - if (forwardToLogin) { - String contextPath = request.getContextPath(); - if (UtilValidate.isNotEmpty(contextPath)) { - newURL.append(contextPath); - } - newURL.append("/control/checkLogin"); - String uri = request.getRequestURI(); - if (UtilValidate.isNotEmpty(contextPath) && uri.startsWith(contextPath)) { - uri = uri.replaceFirst(request.getContextPath(), ""); - } - String servletPath = request.getServletPath(); - if (UtilValidate.isNotEmpty(servletPath) && uri.startsWith(servletPath)) { - uri = uri.replaceFirst(servletPath, ""); - } - newURL.append(uri); - } else { - newURL.append(request.getRequestURI()); - } + newURL.append(request.getRequestURI()); // send the redirect try { @@ -109,8 +128,28 @@ public class OFBizSolrRedirectServlet ex } catch (IllegalStateException ise) { throw new IOException(ise.getMessage(), ise); } - return true; - } - return false; - } + return true; + } + return false; + } + + protected Security getSecurity(HttpServletRequest request) { + Security security = (Security) request.getServletContext().getAttribute("security"); + if (security == null) { + Delegator delegator = (Delegator) request.getServletContext().getAttribute("delegator"); + + if (delegator != null) { + try { + security = SecurityFactory.getInstance(delegator); + } catch (SecurityConfigurationException e) { + Debug.logError(e, "Unable to obtain an instance of the security object.", module); + } + } + request.getServletContext().setAttribute("security", security); + if (security == null) { + Debug.logError("An invalid (null) Security object has been set in the servlet context.", module); + } + } + return security; + } } |
Free forum by Nabble | Edit this page |