[Jboss-cvs] JBossAS SVN: r56157 - trunk/server/src/main/org/jboss/ejb/plugins

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Tue Aug 22 16:14:42 EDT 2006


Author: anil.saldhana at jboss.com
Date: 2006-08-22 16:14:41 -0400 (Tue, 22 Aug 2006)
New Revision: 56157

Modified:
   trunk/server/src/main/org/jboss/ejb/plugins/SecurityInterceptor.java
Log:
JBAS-2738: EJB security interceptor supports audit

Modified: trunk/server/src/main/org/jboss/ejb/plugins/SecurityInterceptor.java
===================================================================
--- trunk/server/src/main/org/jboss/ejb/plugins/SecurityInterceptor.java	2006-08-22 20:14:21 UTC (rev 56156)
+++ trunk/server/src/main/org/jboss/ejb/plugins/SecurityInterceptor.java	2006-08-22 20:14:41 UTC (rev 56157)
@@ -32,6 +32,10 @@
 import org.jboss.security.RealmMapping;
 import org.jboss.security.RunAsIdentity;
 import org.jboss.security.SecurityConstants; 
+import org.jboss.security.audit.AuditContext;
+import org.jboss.security.audit.AuditEvent;
+import org.jboss.security.audit.AuditLevel;
+import org.jboss.security.audit.AuditManager;
 import org.jboss.security.authorization.AuthorizationContext;
 import org.jboss.security.authorization.EJBResource;
 import org.jboss.security.authorization.ResourceKeys; 
@@ -238,15 +242,18 @@
               authenticationObserver.authenticationFailed();
            // Check for the security association exception
            Exception ex = SecurityActions.getContextException();
+           errorAudit(principal,m.getName(),ex);
            if( ex != null )
               throw ex;
            // Else throw a generic SecurityException
            String msg = "Authentication exception, principal=" + principal;
            SecurityException e = new SecurityException(msg);
+           failureAudit(principal,m.getName());
            throw e;
         }
         else
         {
+           successAudit(principal,m.getName());
            SecurityActions.pushSubjectContext(principal, credential, subject);
            if (trace)
            {
@@ -283,6 +290,8 @@
      {
         int check = authorizationManager.authorize(ejbResource);
         isAuthorized = (check == AuthorizationContext.PERMIT);
+        authorizationAudit((isAuthorized ? AuditLevel.SUCCESS : AuditLevel.FAILURE)
+                            ,ejbResource, null);
      } 
      catch (Exception e)
      {
@@ -291,6 +300,7 @@
            log.trace("Error in authorization:",e);
         else
            log.error("Error in authorization:"+e.getLocalizedMessage());
+        authorizationAudit(AuditLevel.ERROR,ejbResource,e);
      } 
      String msg = "Denied: caller=" + caller;
      if(!isAuthorized)
@@ -320,4 +330,53 @@
      SecurityActions.popRunAsIdentity();
      return caller;
   }
+  
+  //******************************************************
+  //  Audit Methods
+  //******************************************************
+  private void audit(String level,
+        Map contextMap, Exception e)
+  { 
+     contextMap.put("Source", getClass().getName());
+     AuditContext ac = AuditManager.getAuditContext(securityManager.getSecurityDomain());
+     AuditEvent ae = new AuditEvent(level);
+     ae.setContextMap(contextMap);
+     ae.setUnderlyingException(e);
+     ac.audit(ae);   
+  }
+  
+  private void successAudit(Principal principal, String methodName)
+  { 
+     audit(AuditLevel.SUCCESS,getContextMap(principal, methodName),null);
+  } 
+  
+  private void failureAudit(Principal principal, String methodName)
+  { 
+     audit(AuditLevel.FAILURE,getContextMap(principal, methodName),null);
+  }
+  
+  private void errorAudit(Principal principal,
+        String methodName, Exception e)
+  { 
+     audit(AuditLevel.ERROR,getContextMap(principal, methodName),e);
+  }
+  
+  private void authorizationAudit(String level, EJBResource resource, Exception e)
+  {
+     //Authorization Exception stacktrace is huge. Scale it down
+     //as the original stack trace can be seen in server.log (if needed)
+     String exceptionMessage = e != null ? e.getLocalizedMessage() : "";  
+     Map cmap = new HashMap();
+     cmap.putAll(resource.getMap());
+     cmap.put("Exception:", exceptionMessage);
+     audit(level,cmap,null);
+  } 
+  
+  private Map getContextMap(Principal principal, String methodName)
+  {
+     Map cmap = new HashMap();
+     cmap.put("principal", principal);
+     cmap.put("method", methodName);
+     return cmap;
+  } 
 }




More information about the jboss-cvs-commits mailing list