You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jspwiki.apache.org by me...@apache.org on 2013/03/20 21:04:22 UTC

svn commit: r1459023 - in /incubator/jspwiki/trunk: ChangeLog etc/web.xml src/org/apache/wiki/Release.java src/org/apache/wiki/auth/SessionMonitor.java src/org/apache/wiki/rpc/json/JSONRPCManager.java

Author: metskem
Date: Wed Mar 20 20:04:22 2013
New Revision: 1459023

URL: http://svn.apache.org/r1459023
Log:
2013-03-20  Harry Metske <me...@apache.org>

       * 2.9.1-svn-31

       * fixed JSPWIKI-766): quick search not working anymore
       * "unfixed"  JSPWIKI-659 : NotSerializableException on Tomcat restart , UserManager not Serializable

Modified:
    incubator/jspwiki/trunk/ChangeLog
    incubator/jspwiki/trunk/etc/web.xml
    incubator/jspwiki/trunk/src/org/apache/wiki/Release.java
    incubator/jspwiki/trunk/src/org/apache/wiki/auth/SessionMonitor.java
    incubator/jspwiki/trunk/src/org/apache/wiki/rpc/json/JSONRPCManager.java

Modified: incubator/jspwiki/trunk/ChangeLog
URL: http://svn.apache.org/viewvc/incubator/jspwiki/trunk/ChangeLog?rev=1459023&r1=1459022&r2=1459023&view=diff
==============================================================================
--- incubator/jspwiki/trunk/ChangeLog (original)
+++ incubator/jspwiki/trunk/ChangeLog Wed Mar 20 20:04:22 2013
@@ -1,3 +1,10 @@
+2013-03-20  Harry Metske <me...@apache.org>
+
+       * 2.9.1-svn-31
+
+       * fixed JSPWIKI-766): quick search not working anymore
+       * "unfixed"  JSPWIKI-659 : NotSerializableException on Tomcat restart , UserManager not Serializable
+
 2013-03-17  Harry Metske <me...@apache.org>
 
        * 2.9.1-svn-30

Modified: incubator/jspwiki/trunk/etc/web.xml
URL: http://svn.apache.org/viewvc/incubator/jspwiki/trunk/etc/web.xml?rev=1459023&r1=1459022&r2=1459023&view=diff
==============================================================================
--- incubator/jspwiki/trunk/etc/web.xml (original)
+++ incubator/jspwiki/trunk/etc/web.xml Wed Mar 20 20:04:22 2013
@@ -142,10 +142,6 @@
    <servlet>
        <servlet-name>com.metaparadigm.jsonrpc.JSONRPCServlet</servlet-name>
        <servlet-class>com.metaparadigm.jsonrpc.JSONRPCServlet</servlet-class>
-       <init-param>
-           <param-name>auto-session-bridge</param-name>
-           <param-value>0</param-value>
-       </init-param>
    </servlet>
 
    <!-- Atom Publishing Protocol -->

Modified: incubator/jspwiki/trunk/src/org/apache/wiki/Release.java
URL: http://svn.apache.org/viewvc/incubator/jspwiki/trunk/src/org/apache/wiki/Release.java?rev=1459023&r1=1459022&r2=1459023&view=diff
==============================================================================
--- incubator/jspwiki/trunk/src/org/apache/wiki/Release.java (original)
+++ incubator/jspwiki/trunk/src/org/apache/wiki/Release.java Wed Mar 20 20:04:22 2013
@@ -75,7 +75,7 @@ public final class Release
      *  <p>
      *  If the build identifier is empty, it is not added.
      */
-    public static final String     BUILD         = "30";
+    public static final String     BUILD         = "31";
     
     /**
      *  This is the generic version string you should use

Modified: incubator/jspwiki/trunk/src/org/apache/wiki/auth/SessionMonitor.java
URL: http://svn.apache.org/viewvc/incubator/jspwiki/trunk/src/org/apache/wiki/auth/SessionMonitor.java?rev=1459023&r1=1459022&r2=1459023&view=diff
==============================================================================
--- incubator/jspwiki/trunk/src/org/apache/wiki/auth/SessionMonitor.java (original)
+++ incubator/jspwiki/trunk/src/org/apache/wiki/auth/SessionMonitor.java Wed Mar 20 20:04:22 2013
@@ -32,6 +32,7 @@ import org.apache.wiki.WikiSession;
 import org.apache.wiki.event.WikiEventListener;
 import org.apache.wiki.event.WikiEventManager;
 import org.apache.wiki.event.WikiSecurityEvent;
+import org.apache.wiki.rpc.json.JSONRPCManager;
 
 /**
  *  <p>Manages WikiSession's for different WikiEngine's.</p>
@@ -247,6 +248,9 @@ public class SessionMonitor implements H
      */
     public void sessionCreated( HttpSessionEvent se )
     {
+        HttpSession session = se.getSession();
+        
+        JSONRPCManager.sessionCreated(session);
     }
 
     /**

Modified: incubator/jspwiki/trunk/src/org/apache/wiki/rpc/json/JSONRPCManager.java
URL: http://svn.apache.org/viewvc/incubator/jspwiki/trunk/src/org/apache/wiki/rpc/json/JSONRPCManager.java?rev=1459023&r1=1459022&r2=1459023&view=diff
==============================================================================
--- incubator/jspwiki/trunk/src/org/apache/wiki/rpc/json/JSONRPCManager.java (original)
+++ incubator/jspwiki/trunk/src/org/apache/wiki/rpc/json/JSONRPCManager.java Wed Mar 20 20:04:22 2013
@@ -24,8 +24,10 @@ import java.util.HashMap;
 import java.util.Iterator;
 
 import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpSession;
 
 import org.apache.log4j.Logger;
+
 import org.apache.wiki.WikiContext;
 import org.apache.wiki.WikiEngine;
 import org.apache.wiki.WikiSession;
@@ -34,7 +36,6 @@ import org.apache.wiki.auth.permissions.
 import org.apache.wiki.rpc.RPCCallable;
 import org.apache.wiki.rpc.RPCManager;
 import org.apache.wiki.ui.TemplateManager;
-
 import com.metaparadigm.jsonrpc.InvocationCallback;
 import com.metaparadigm.jsonrpc.JSONRPCBridge;
 
@@ -55,6 +56,7 @@ import com.metaparadigm.jsonrpc.JSONRPCB
 // FIXME: Must be mootool-ified.
 public final class JSONRPCManager extends RPCManager
 {
+    private static final String JSONRPCBRIDGE = "JSONRPCBridge";
     private static HashMap<String, CallbackContainer> c_globalObjects = new HashMap<String, CallbackContainer>();
     
     /** Prevent instantiation */
@@ -85,6 +87,43 @@ public final class JSONRPCManager extend
     }
     
     /**
+     *  Finds this user's personal RPC Bridge.  If it does not exist, will
+     *  create one and put it in the context.  If there is no HTTP Request included,
+     *  returns the global bridge.
+     *  
+     *  @param context WikiContext to find the bridge in
+     *  @return A JSON RPC Bridge
+     */
+    // FIXME: Is returning the global bridge a potential security threat?
+    private static JSONRPCBridge getBridge( WikiContext context )
+    {
+        JSONRPCBridge bridge = null;
+        HttpServletRequest req = context.getHttpRequest();
+        
+        if( req != null )
+        {
+            HttpSession hs = req.getSession();
+            
+            if( hs != null )
+            {
+                bridge = (JSONRPCBridge)hs.getAttribute(JSONRPCBRIDGE);
+                
+                if( bridge == null )
+                {
+                    bridge = new JSONRPCBridge();
+                
+                    hs.setAttribute(JSONRPCBRIDGE, bridge);
+                }
+            }
+        }
+        
+        if( bridge == null) bridge = JSONRPCBridge.getGlobalBridge();
+        bridge.setDebug(false);
+        
+        return bridge;
+    }
+    
+    /**
      *  Registers a callable to JSON global bridge and requests JSON libraries to be added
      *  to the page.  
      *  
@@ -95,7 +134,7 @@ public final class JSONRPCManager extend
     public static String registerJSONObject( WikiContext context, RPCCallable c )
     {
         String id = getId(c);
-        JSONRPCBridge.getGlobalBridge().registerObject( id, c );
+        getBridge(context).registerObject( id, c );
 
         requestJSON( context );
         return id;
@@ -116,7 +155,7 @@ public final class JSONRPCManager extend
                                            TemplateManager.RESOURCE_JSFUNCTION, 
                                            "jsonrpc = new JSONRpcClient(\""+jsonurl+"\");");
         
-        JSONRPCBridge.getGlobalBridge().registerCallback(new WikiJSONAccessor(), HttpServletRequest.class);
+        getBridge(context).registerCallback(new WikiJSONAccessor(), HttpServletRequest.class);
     }
     
     /**
@@ -218,6 +257,40 @@ public final class JSONRPCManager extend
     }
 
     /**
+     *  Is called whenever a session is created.  This method creates a new JSONRPCBridge
+     *  and adds it to the user session.  This is done because the global JSONRPCBridge
+     *  InvocationCallbacks are not called; only session locals.  This may be a bug
+     *  in JSON-RPC, or it may be a design feature...
+     *  <p>
+     *  The JSONRPCBridge object will go away once the session expires.
+     *  
+     *  @param session The HttpSession which was created.
+     */
+    public static void sessionCreated( HttpSession session )
+    {
+        JSONRPCBridge bridge = (JSONRPCBridge)session.getAttribute(JSONRPCBRIDGE);
+        
+        if( bridge == null )
+        {
+            bridge = new JSONRPCBridge();
+        
+            session.setAttribute( JSONRPCBRIDGE, bridge );
+        }
+
+        WikiJSONAccessor acc = new WikiJSONAccessor();
+        
+        bridge.registerCallback( acc, HttpServletRequest.class );
+        
+        for( Iterator i = c_globalObjects.values().iterator(); i.hasNext(); )
+        {
+            CallbackContainer cc = (CallbackContainer) i.next();
+       
+            bridge.registerObject( cc.m_id, cc.m_object );
+        }
+
+    }
+     
+    /**
      *  Just stores the registered global method.
      *  
      *