Author: rjung
Date: Sun Apr 11 18:26:20 2010
New Revision: 932969

URL: http://svn.apache.org/viewvc?rev=932969&view=rev
Log:
Reduce failures of new API when running under security manager.

Modified:
    tomcat/trunk/java/org/apache/catalina/core/ApplicationContextFacade.java

Modified: 
tomcat/trunk/java/org/apache/catalina/core/ApplicationContextFacade.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/core/ApplicationContextFacade.java?rev=932969&r1=932968&r2=932969&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/core/ApplicationContextFacade.java 
(original)
+++ tomcat/trunk/java/org/apache/catalina/core/ApplicationContextFacade.java 
Sun Apr 11 18:26:20 2010
@@ -103,6 +103,15 @@ public final class ApplicationContextFac
         classCache.put("getRequestDispatcher", clazz);
         classCache.put("getNamedDispatcher", clazz);
         classCache.put("getServlet", clazz);
+        classCache.put("setInitParameter", new Class[]{String.class, 
String.class});
+        classCache.put("createServlet", new Class[]{Class.class});
+        classCache.put("addServlet", new Class[]{String.class, String.class});
+        classCache.put("createFilter", new Class[]{Class.class});
+        classCache.put("addFilter", new Class[]{String.class, String.class});
+        classCache.put("createListener", new Class[]{Class.class});
+        classCache.put("addListener", clazz);
+        classCache.put("getFilterRegistration", clazz);
+        classCache.put("getServletRegistration", clazz);
         classCache.put("getInitParameter", clazz);
         classCache.put("setAttribute", new Class[]{String.class, 
Object.class});
         classCache.put("removeAttribute", clazz);
@@ -110,8 +119,6 @@ public final class ApplicationContextFac
         classCache.put("getAttribute", clazz);
         classCache.put("log", clazz);
         classCache.put("setSessionTrackingModes", new Class[]{EnumSet.class} );
-        classCache.put("setSessionCookieConfig",
-                new Class[]{SessionCookieConfig.class});
     }
 
 
@@ -414,7 +421,7 @@ public final class ApplicationContextFac
             Filter filter) {
         if (SecurityUtil.isPackageProtectionEnabled()) {
             return (FilterRegistration.Dynamic) doPrivileged(
-                    "addFilter", new Object[]{filterName, filter});
+                    "addFilter", new Class[]{String.class, Filter.class}, new 
Object[]{filterName, filter});
         } else {
             return context.addFilter(filterName, filter);
         }
@@ -425,7 +432,7 @@ public final class ApplicationContextFac
             Class<? extends Filter> filterClass) {
         if (SecurityUtil.isPackageProtectionEnabled()) {
             return (FilterRegistration.Dynamic) doPrivileged(
-                    "addFilter", new Object[]{filterName, filterClass});
+                    "addFilter", new Object[]{filterName, 
filterClass.getName()});
         } else {
             return context.addFilter(filterName, filterClass);
         }
@@ -435,8 +442,15 @@ public final class ApplicationContextFac
     public <T extends Filter> T createFilter(Class<T> c)
     throws ServletException {
         if (SecurityUtil.isPackageProtectionEnabled()) {
-            return (T) doPrivileged(
-                    "createFilter", new Object[]{c});
+            try {
+                return (T) invokeMethod(context, "createFilter", 
+                                              new Object[]{c});
+            } catch (Throwable t) {
+                if (t instanceof ServletException) {
+                    throw (ServletException) t;
+                }
+                return null;
+            }
         } else {
             return context.createFilter(c);
         }
@@ -446,7 +460,7 @@ public final class ApplicationContextFac
     public FilterRegistration getFilterRegistration(String filterName) {
         if (SecurityUtil.isPackageProtectionEnabled()) {
             return (FilterRegistration) doPrivileged(
-                    "findFilterRegistration", new Object[]{filterName});
+                    "getFilterRegistration", new Object[]{filterName});
         } else {
             return context.getFilterRegistration(filterName);
         }
@@ -468,7 +482,7 @@ public final class ApplicationContextFac
             Servlet servlet) {
         if (SecurityUtil.isPackageProtectionEnabled()) {
             return (ServletRegistration.Dynamic) doPrivileged(
-                    "addServlet", new Object[]{servletName, servlet});
+                    "addServlet", new Class[]{String.class, Servlet.class}, 
new Object[]{servletName, servlet});
         } else {
             return context.addServlet(servletName, servlet);
         }
@@ -479,7 +493,7 @@ public final class ApplicationContextFac
             Class <? extends Servlet> servletClass) {
         if (SecurityUtil.isPackageProtectionEnabled()) {
             return (ServletRegistration.Dynamic) doPrivileged(
-                    "addServlet", new Object[]{servletName, servletClass});
+                    "addServlet", new Object[]{servletName, 
servletClass.getName()});
         } else {
             return context.addServlet(servletName, servletClass);
         }
@@ -490,8 +504,15 @@ public final class ApplicationContextFac
     public <T extends Servlet> T createServlet(Class<T> c)
     throws ServletException {
         if (SecurityUtil.isPackageProtectionEnabled()) {
-            return (T) doPrivileged(
-                    "createServlet", new Object[]{c});
+            try {
+                return (T) invokeMethod(context, "createServlet", 
+                                              new Object[]{c});
+            } catch (Throwable t) {
+                if (t instanceof ServletException) {
+                    throw (ServletException) t;
+                }
+                return null;
+            }
         } else {
             return context.createServlet(c);
         }
@@ -501,7 +522,7 @@ public final class ApplicationContextFac
     public ServletRegistration getServletRegistration(String servletName) {
         if (SecurityUtil.isPackageProtectionEnabled()) {
             return (ServletRegistration) doPrivileged(
-                    "findServletRegistration", new Object[]{servletName});
+                    "getServletRegistration", new Object[]{servletName});
         } else {
             return context.getServletRegistration(servletName);
         }
@@ -564,7 +585,7 @@ public final class ApplicationContextFac
     public void addListener(Class<? extends EventListener> listenerClass) {
         if (SecurityUtil.isPackageProtectionEnabled()) {
             doPrivileged("addListener",
-                    new Object[]{listenerClass});
+                    new Object[]{listenerClass.getName()});
         } else {
             context.addListener(listenerClass);
         }
@@ -586,7 +607,7 @@ public final class ApplicationContextFac
     public <T extends EventListener> void addListener(T t) {
         if (SecurityUtil.isPackageProtectionEnabled()) {
             doPrivileged("addListener",
-                    new Object[]{t});
+                    new Object[]{t.getClass().getName()});
         } else {
             context.addListener(t);
         }
@@ -598,7 +619,15 @@ public final class ApplicationContextFac
     public <T extends EventListener> T createListener(Class<T> c)
             throws ServletException {
         if (SecurityUtil.isPackageProtectionEnabled()) {
-            return (T) doPrivileged("createListener", new Object[]{c});
+            try {
+                return (T) invokeMethod(context, "createListener", 
+                                              new Object[]{c});
+            } catch (Throwable t) {
+                if (t instanceof ServletException) {
+                    throw (ServletException) t;
+                }
+                return null;
+            }
         } else {
             return context.createListener(c);
         }
@@ -608,6 +637,7 @@ public final class ApplicationContextFac
     @Override
     public void declareRoles(String... roleNames) {
         if (SecurityUtil.isPackageProtectionEnabled()) {
+//FIXME
             doPrivileged("declareRoles",
                     new Object[]{roleNames});
         } else {
@@ -685,11 +715,10 @@ public final class ApplicationContextFac
     /**
      * Use reflection to invoke the requested method. Cache the method object 
      * to speed up the process
-     *                   will be invoked
      * @param methodName The method to call.
      * @param params The arguments passed to the called method.
      */
-    private Object doPrivileged(final String methodName, final Object[] 
params){
+    private Object doPrivileged(final String methodName, final Object[] 
params) {
         try{
             return invokeMethod(context, methodName, params);
         }catch(Throwable t){
@@ -737,7 +766,7 @@ public final class ApplicationContextFac
      */    
     private Object doPrivileged(final String methodName, 
                                 final Class<?>[] clazz,
-                                Object[] params){
+                                Object[] params) {
 
         try{
             Method method = context.getClass().getMethod(methodName, clazz);



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to