瀏覽代碼

Find target domain object argument in a manner that works if nulls are presented for the domain object argument.

Ben Alex 21 年之前
父節點
當前提交
07e2037251
共有 1 個文件被更改,包括 10 次插入12 次删除
  1. 10 12
      core/src/main/java/org/acegisecurity/vote/BasicAclEntryVoter.java

+ 10 - 12
core/src/main/java/org/acegisecurity/vote/BasicAclEntryVoter.java

@@ -330,22 +330,20 @@ public class BasicAclEntryVoter implements AccessDecisionVoter,
     }
 
     private Object getDomainObjectInstance(Object secureObject) {
-        if (secureObject instanceof MethodInvocation) {
-            MethodInvocation invocation = (MethodInvocation) secureObject;
+        MethodInvocation invocation = (MethodInvocation) secureObject;
 
-            for (int i = 0; i < invocation.getArguments().length; i++) {
-                Class argClass = invocation.getArguments()[i].getClass();
+        // Check if this MethodInvocation provides the required argument
+        Method method = invocation.getMethod();
+        Class[] params = method.getParameterTypes();
 
-                if (processDomainObjectClass.isAssignableFrom(argClass)) {
-                    return invocation.getArguments()[i];
-                }
+        for (int i = 0; i < params.length; i++) {
+            if (processDomainObjectClass.isAssignableFrom(params[i])) {
+                return invocation.getArguments()[i];
             }
-
-            throw new AuthorizationServiceException("MethodInvocation: "
-                + invocation + " did not provide any argument of type: "
-                + processDomainObjectClass);
         }
 
-        return null; // should never happen
+        throw new AuthorizationServiceException("MethodInvocation: "
+            + invocation + " did not provide any argument of type: "
+            + processDomainObjectClass);
     }
 }