You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by ge...@apache.org on 2010/01/15 07:46:46 UTC
svn commit: r899548 - in /geronimo/server/trunk/plugins/console:
console-filter/src/main/java/org/apache/geronimo/console/filter/
console-portal-driver/src/main/java/org/apache/geronimo/console/filter/
console-portal-driver/src/main/webapp/WEB-INF/ con...
Author: genspring
Date: Fri Jan 15 06:46:46 2010
New Revision: 899548
URL: http://svn.apache.org/viewvc?rev=899548&view=rev
Log:
GERONIMO-4994 use hash to keep the page to the latest page viewed after refresh.
Added:
geronimo/server/trunk/plugins/console/console-portal-driver/src/main/java/org/apache/geronimo/console/filter/RedirectByHashFilter.java (with props)
Modified:
geronimo/server/trunk/plugins/console/console-filter/src/main/java/org/apache/geronimo/console/filter/XSRFHandler.java
geronimo/server/trunk/plugins/console/console-portal-driver/src/main/webapp/WEB-INF/themes/navigation.jsp
geronimo/server/trunk/plugins/console/console-portal-driver/src/main/webapp/WEB-INF/themes/portlets-only.jsp
geronimo/server/trunk/plugins/console/console-portal-driver/src/main/webapp/WEB-INF/themes/portlets-with-tree.jsp
geronimo/server/trunk/plugins/console/console-portal-driver/src/main/webapp/WEB-INF/web.xml
Modified: geronimo/server/trunk/plugins/console/console-filter/src/main/java/org/apache/geronimo/console/filter/XSRFHandler.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/console/console-filter/src/main/java/org/apache/geronimo/console/filter/XSRFHandler.java?rev=899548&r1=899547&r2=899548&view=diff
==============================================================================
--- geronimo/server/trunk/plugins/console/console-filter/src/main/java/org/apache/geronimo/console/filter/XSRFHandler.java (original)
+++ geronimo/server/trunk/plugins/console/console-filter/src/main/java/org/apache/geronimo/console/filter/XSRFHandler.java Fri Jan 15 06:46:46 2010
@@ -48,6 +48,7 @@
private static final String XSRF_JS_FILENAME = "/XSRF.js";
private static final String XSRF_JS_UNIQUEID = "<%XSRF_UNIQUEID%>";
private static final String NOXSS_SHOW_TREE = "noxssShowTree";
+ private static final String NOXSS_HASH_OF_PAGE_TO_REDIRECT = "noxssPage";
private Map<String, String> sessionMap = new ConcurrentHashMap<String, String>();
private String xsrfJS;
@@ -86,8 +87,14 @@
if ((hreq.getQueryString() != null) || (hreq.getParameterNames().hasMoreElements())) {
- if (hreq.getParameterMap().keySet().size() == 1 && hreq.getParameter(NOXSS_SHOW_TREE) != null
- && hreq.getParameter(NOXSS_SHOW_TREE).equals("true")) {
+ if (hreq.getParameterMap().keySet().size() == 1 && hreq.getParameter(NOXSS_SHOW_TREE) != null) {
+
+ return false;
+
+ }
+
+ if (hreq.getParameterMap().keySet().size() == 2 && hreq.getParameter(NOXSS_SHOW_TREE) != null
+ && hreq.getParameter(NOXSS_HASH_OF_PAGE_TO_REDIRECT)!=null) {
return false;
Added: geronimo/server/trunk/plugins/console/console-portal-driver/src/main/java/org/apache/geronimo/console/filter/RedirectByHashFilter.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/console/console-portal-driver/src/main/java/org/apache/geronimo/console/filter/RedirectByHashFilter.java?rev=899548&view=auto
==============================================================================
--- geronimo/server/trunk/plugins/console/console-portal-driver/src/main/java/org/apache/geronimo/console/filter/RedirectByHashFilter.java (added)
+++ geronimo/server/trunk/plugins/console/console-portal-driver/src/main/java/org/apache/geronimo/console/filter/RedirectByHashFilter.java Fri Jan 15 06:46:46 2010
@@ -0,0 +1,126 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.geronimo.console.filter;
+
+import java.io.IOException;
+import java.util.Map;
+import java.util.Random;
+import java.util.WeakHashMap;
+
+import javax.servlet.Filter;
+import javax.servlet.FilterChain;
+import javax.servlet.FilterConfig;
+import javax.servlet.ServletException;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+/**
+ * This filter is used to
+ * 1,Keep a hash-->url mapping
+ * 2,Redirect to certain url based on hash parameter in request*
+ *
+ * @version $Rev$ $Date$
+ */
+public class RedirectByHashFilter implements Filter {
+
+ private static final Logger log = LoggerFactory.getLogger(RedirectByHashFilter.class);
+
+ private static final Random random = new Random(System.currentTimeMillis());
+
+ private static final Map<String,String> hashToRedirectURL=new WeakHashMap<String,String>();
+ private static final Map<String,String> redirectURLToHash=new WeakHashMap<String,String>();
+
+ private static final String NOXSS_HASH_OF_PAGE_TO_REDIRECT = "noxssPage";
+ private static final String NOXSS_SHOW_TREE = "noxssShowTree";
+ private static final String HASH_OF_CURRENT_PORTAL_PAGE = "hashOfCurrentPortalPage";
+
+ public void destroy() {
+ }
+
+ public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException,
+ ServletException {
+
+ //Generate hash for pure portlets page but not the index page.
+ if (request instanceof HttpServletRequest && request.getParameter(NOXSS_SHOW_TREE) == null) {
+
+ HttpServletRequest httpServletRequest = (HttpServletRequest) request;
+
+ String currentRequestURI = httpServletRequest.getServletPath()+httpServletRequest.getPathInfo();
+
+ String hash;
+
+ if (redirectURLToHash.get(currentRequestURI) == null) {
+
+ hash = Long.toString(random.nextLong());
+
+ //ensure the key is unique
+ while (hashToRedirectURL.keySet().contains(hash)) {
+ hash = Long.toString(random.nextLong());
+ }
+
+ hashToRedirectURL.put(hash, currentRequestURI);
+ redirectURLToHash.put(currentRequestURI, hash);
+
+ } else {
+ hash = redirectURLToHash.get(currentRequestURI);
+ }
+
+ log.info("Hash value for page:"+currentRequestURI+" is:"+hash);
+
+ //this attribute will be used to add hash to index page.
+ request.setAttribute(HASH_OF_CURRENT_PORTAL_PAGE,hash);
+
+ }
+
+ String hashOfPageToRedirect = request.getParameter(NOXSS_HASH_OF_PAGE_TO_REDIRECT);
+
+ //Redirect index page url that contain noxssPage=xxxxxx to the real destination.
+ if (hashOfPageToRedirect != null && request.getParameter(NOXSS_SHOW_TREE) != null) {
+
+ String pageToRedirect = hashToRedirectURL.get(hashOfPageToRedirect) + "?"+NOXSS_SHOW_TREE+"=true";
+ HttpServletResponse httpServletResponse = (HttpServletResponse) response;
+
+ //log.info("Redirecting to:" + pageToRedirect+" according to hash:"+hashOfPageToRedirect);
+
+ // pageToRedirect=pageToRedirect.substring("/console".length());
+ log.info("Redirecting to:" + pageToRedirect+" according to hash:"+hashOfPageToRedirect);
+ // request.getParameterMap().remove(NOXSS_HASH_OF_PAGE_TO_REDIRECT);
+ request.getRequestDispatcher(pageToRedirect).forward(request, response);
+
+ return;
+ //httpServletResponse.sendRedirect(pageToRedirect);
+
+ } else {
+
+ log.info("no redirect for:" + ((HttpServletRequest)request).getRequestURL());
+ filterChain.doFilter(request, response);
+ }
+
+
+ }
+
+ public void init(FilterConfig arg0) throws ServletException {
+ // TODO Auto-generated method stub
+ }
+
+}
Propchange: geronimo/server/trunk/plugins/console/console-portal-driver/src/main/java/org/apache/geronimo/console/filter/RedirectByHashFilter.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: geronimo/server/trunk/plugins/console/console-portal-driver/src/main/webapp/WEB-INF/themes/navigation.jsp
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/console/console-portal-driver/src/main/webapp/WEB-INF/themes/navigation.jsp?rev=899548&r1=899547&r2=899548&view=diff
==============================================================================
--- geronimo/server/trunk/plugins/console/console-portal-driver/src/main/webapp/WEB-INF/themes/navigation.jsp (original)
+++ geronimo/server/trunk/plugins/console/console-portal-driver/src/main/webapp/WEB-INF/themes/navigation.jsp Fri Jan 15 06:46:46 2010
@@ -158,7 +158,10 @@
anchorName = anchors[i].innerHTML;
if ( anchorName == portalPageName) {
displayPortlets(anchors[i]);
- findAndSelect(portalPageName,navigationTree.rootNode);
+
+ if(navigationTree){
+ findAndSelect(portalPageName,navigationTree.rootNode);
+ }
return;
}
}
@@ -166,9 +169,14 @@
}
function displayPortlets(anchor){
+
+ var iframeHref = anchor.href;
- document.getElementById('content').style.display = 'none';
- document.getElementById("portletsFrame").src = anchor.href+"?formId="+formID;
+ if(document.location.href.indexOf(iframeHref)==0){
+ iframeHref=document.location.href.substring(0,document.location.href.indexOf("?"));
+ }
+
+ document.getElementById("portletsFrame").src = iframeHref+"?formId="+formID;
setTimeout('returnToTop()', 30);
}
Modified: geronimo/server/trunk/plugins/console/console-portal-driver/src/main/webapp/WEB-INF/themes/portlets-only.jsp
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/console/console-portal-driver/src/main/webapp/WEB-INF/themes/portlets-only.jsp?rev=899548&r1=899547&r2=899548&view=diff
==============================================================================
--- geronimo/server/trunk/plugins/console/console-portal-driver/src/main/webapp/WEB-INF/themes/portlets-only.jsp (original)
+++ geronimo/server/trunk/plugins/console/console-portal-driver/src/main/webapp/WEB-INF/themes/portlets-only.jsp Fri Jan 15 06:46:46 2010
@@ -28,5 +28,11 @@
<jsp:include page="portlet-skin.jsp" />
</c:forEach>
</div>
+
+<script type="text/javascript">
+ if(parent){
+ parent.location.hash="#noxssPage=<c:out value="${hashOfCurrentPortalPage}"/>";
+ }
+</script>
</body>
Modified: geronimo/server/trunk/plugins/console/console-portal-driver/src/main/webapp/WEB-INF/themes/portlets-with-tree.jsp
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/console/console-portal-driver/src/main/webapp/WEB-INF/themes/portlets-with-tree.jsp?rev=899548&r1=899547&r2=899548&view=diff
==============================================================================
--- geronimo/server/trunk/plugins/console/console-portal-driver/src/main/webapp/WEB-INF/themes/portlets-with-tree.jsp (original)
+++ geronimo/server/trunk/plugins/console/console-portal-driver/src/main/webapp/WEB-INF/themes/portlets-with-tree.jsp Fri Jan 15 06:46:46 2010
@@ -17,12 +17,29 @@
limitations under the License.
--%>
<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %>
+<%@ taglib uri="http://java.sun.com/jstl/fmt_rt" prefix="fmt"%>
<%@ taglib uri="http://portals.apache.org/pluto" prefix="pluto" %>
+<fmt:setLocale value="<%=request.getLocale()%>" />
+<fmt:setBundle basename="org.apache.geronimo.console.i18n.ConsoleResource"/>
+<%@ page import="org.apache.geronimo.pluto.impl.PageConfig"%>
<body id="admin-console" marginwidth="0" marginheight="0" leftmargin="0" topmargin="0" rightmargin="0">
<script language="JavaScript">
+<%-- When there's hash in current page url
+redirect the page with noxxsPage hash as the query string,
+the server side will get the real redirect target page based on the value of noxxsPage--%>
+
+ if(document.location.hash!='') {
+ var href = document.location.href;
+ var newHref = href.substring(0,href.lastIndexOf("#"));
+ if(newHref.indexOf("&noxssPage")>0){
+ newHref = newHref.substring(0,href.indexOf("&noxssPage"));
+ }
+ document.location.href = newHref + "&noxssPage=" +document.location.hash.substr(11,document.location.hash.length);
+ }
+
var iframeId;
function delayResize(id){
@@ -96,18 +113,6 @@
<!-- Portlet Section -->
<td class="Gutter"> </td> <!-- Spacer -->
<td valign="top">
-
- <!-- Content block: portlets are divided into two columns/groups -->
- <!--<div id="body-block" style="height:100%">-->
- <div id="content">
- <pluto:isMaximized var="isMax" />
-
- <c:forEach var="portlet" varStatus="status" items="${currentPage.portletIds}">
- <c:set var="portlet" value="${portlet}" scope="request" />
- <jsp:include page="portlet-skin.jsp" />
- </c:forEach>
-
- </div>
<iframe src="" id="portletsFrame" width="100%" height="100%" scrolling="no" frameborder="0" onload="if (window.parent && window.parent.delayResize) {window.parent.delayResize('portletsFrame');}">
@@ -123,4 +128,12 @@
</tr>
</table>
</body>
-
+<script type="text/javascript">
+ <%
+ PageConfig pc=(PageConfig)request.getAttribute("currentPage");
+ String pageID=pc.getName();
+ String pageName=pageID.substring(pageID.lastIndexOf("/")+1,pageID.length());
+ %>
+ var pageName = "<fmt:message key="<%=pageName%>"/>";
+ quickLaunchPortlets(pageName);
+</script>
Modified: geronimo/server/trunk/plugins/console/console-portal-driver/src/main/webapp/WEB-INF/web.xml
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/console/console-portal-driver/src/main/webapp/WEB-INF/web.xml?rev=899548&r1=899547&r2=899548&view=diff
==============================================================================
--- geronimo/server/trunk/plugins/console/console-portal-driver/src/main/webapp/WEB-INF/web.xml (original)
+++ geronimo/server/trunk/plugins/console/console-portal-driver/src/main/webapp/WEB-INF/web.xml Fri Jan 15 06:46:46 2010
@@ -58,13 +58,23 @@
</filter>
<filter-mapping>
- <filter-name>PlutoURLRebuildFilter</filter-name>
- <url-pattern>/portal/*</url-pattern>
+ <filter-name>PlutoURLRebuildFilter</filter-name>
+ <url-pattern>/portal/*</url-pattern>
</filter-mapping>
<filter-mapping>
- <filter-name>PlutoURLRebuildFilter</filter-name>
- <url-pattern>/secure/*</url-pattern>
+ <filter-name>PlutoURLRebuildFilter</filter-name>
+ <url-pattern>/secure/*</url-pattern>
+ </filter-mapping>
+
+ <filter>
+ <filter-name>RedirectByHashFilter</filter-name>
+ <filter-class>org.apache.geronimo.console.filter.RedirectByHashFilter</filter-class>
+ </filter>
+
+ <filter-mapping>
+ <filter-name>RedirectByHashFilter</filter-name>
+ <url-pattern>/portal/*</url-pattern>
</filter-mapping>
<servlet>