This is an automated email from the ASF dual-hosted git repository.

ffang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/cxf.git


The following commit(s) were added to refs/heads/master by this push:
     new 1cfdb42  [CXF-7815]for better performance
1cfdb42 is described below

commit 1cfdb42724549fdef21a9d50d62cd9dbdc5d8dd3
Author: Freeman Fang <[email protected]>
AuthorDate: Fri Nov 9 11:36:42 2018 +0800

    [CXF-7815]for better performance
---
 .../security/DefaultSecurityContext.java           | 28 +++++++++++++++++-----
 1 file changed, 22 insertions(+), 6 deletions(-)

diff --git 
a/core/src/main/java/org/apache/cxf/interceptor/security/DefaultSecurityContext.java
 
b/core/src/main/java/org/apache/cxf/interceptor/security/DefaultSecurityContext.java
index 71a212f..547c8ac 100644
--- 
a/core/src/main/java/org/apache/cxf/interceptor/security/DefaultSecurityContext.java
+++ 
b/core/src/main/java/org/apache/cxf/interceptor/security/DefaultSecurityContext.java
@@ -37,10 +37,26 @@ import org.apache.cxf.security.LoginSecurityContext;
  * Groups the principal is a member of
  */
 public class DefaultSecurityContext implements LoginSecurityContext {
-
+    
+    private static Class<?> javaGroup; 
+    private static Class<?> karafGroup;
+    
     private Principal p;
     private Subject subject;
 
+    static {
+        try {
+            javaGroup = Class.forName("java.security.acl.Group");
+        } catch (Throwable e) {
+            javaGroup = null;
+        }
+        try {
+            karafGroup = 
Class.forName("org.apache.karaf.jaas.boot.principal.Group");
+        } catch (Throwable e) {
+            karafGroup = null;
+        }
+    }
+    
     public DefaultSecurityContext(Subject subject) {
         this.p = findPrincipal(null, subject);
         this.subject = subject;
@@ -147,18 +163,18 @@ public class DefaultSecurityContext implements 
LoginSecurityContext {
     }
     
     
-    private static boolean instanceOf(Object obj, String className) { 
+    private static boolean instanceOfGroup(Object obj) { 
         try {
-            return Class.forName(className).isInstance(obj);
-        } catch (ClassNotFoundException ex) {
+            return (javaGroup != null && javaGroup.isInstance(obj)) 
+                || (karafGroup != null && karafGroup.isInstance(obj));
+        } catch (Exception ex) {
             return false;
         }
     }
     
     public static boolean isGroupPrincipal(Principal principal) {
         return principal instanceof GroupPrincipal
-            || instanceOf(principal, "java.security.acl.Group")
-            || instanceOf(principal, 
"org.apache.karaf.jaas.boot.principal.Group");
+            || instanceOfGroup(principal);
     }
 
 }

Reply via email to