[jboss-cvs] JBossAS SVN: r71681 - in projects/security/security-xacml/trunk/jboss-xacml-saml/src/main/java/org/jboss/security/xacml/saml/integration/opensaml: servlets and 1 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Thu Apr 3 03:13:36 EDT 2008


Author: anil.saldhana at jboss.com
Date: 2008-04-03 03:13:36 -0400 (Thu, 03 Apr 2008)
New Revision: 71681

Modified:
   projects/security/security-xacml/trunk/jboss-xacml-saml/src/main/java/org/jboss/security/xacml/saml/integration/opensaml/impl/XACMLAuthzDecisionStatementTypeImpl.java
   projects/security/security-xacml/trunk/jboss-xacml-saml/src/main/java/org/jboss/security/xacml/saml/integration/opensaml/impl/XACMLAuthzDecisionStatementTypeImplBuilder.java
   projects/security/security-xacml/trunk/jboss-xacml-saml/src/main/java/org/jboss/security/xacml/saml/integration/opensaml/impl/XACMLAuthzDecisionStatementTypeMarshaller.java
   projects/security/security-xacml/trunk/jboss-xacml-saml/src/main/java/org/jboss/security/xacml/saml/integration/opensaml/impl/XACMLAuthzDecisionStatementTypeUnMarshaller.java
   projects/security/security-xacml/trunk/jboss-xacml-saml/src/main/java/org/jboss/security/xacml/saml/integration/opensaml/servlets/SAMLXACMLServlet.java
   projects/security/security-xacml/trunk/jboss-xacml-saml/src/main/java/org/jboss/security/xacml/saml/integration/opensaml/types/XACMLAuthzDecisionStatementType.java
Log:
changes to the servlet and marshallers

Modified: projects/security/security-xacml/trunk/jboss-xacml-saml/src/main/java/org/jboss/security/xacml/saml/integration/opensaml/impl/XACMLAuthzDecisionStatementTypeImpl.java
===================================================================
--- projects/security/security-xacml/trunk/jboss-xacml-saml/src/main/java/org/jboss/security/xacml/saml/integration/opensaml/impl/XACMLAuthzDecisionStatementTypeImpl.java	2008-04-03 07:12:35 UTC (rev 71680)
+++ projects/security/security-xacml/trunk/jboss-xacml-saml/src/main/java/org/jboss/security/xacml/saml/integration/opensaml/impl/XACMLAuthzDecisionStatementTypeImpl.java	2008-04-03 07:13:36 UTC (rev 71681)
@@ -23,11 +23,18 @@
 
 import java.util.List;
 
+import org.jboss.security.xacml.interfaces.ElementMappingType;
 import org.jboss.security.xacml.interfaces.RequestContext;
 import org.jboss.security.xacml.interfaces.ResponseContext;
 import org.jboss.security.xacml.saml.integration.opensaml.types.XACMLAuthzDecisionStatementType;
 import org.opensaml.common.impl.AbstractSAMLObject;
+import org.opensaml.saml2.core.Statement;
 import org.opensaml.xml.XMLObject;
+import org.opensaml.xml.util.XMLConstants;
+import org.opensaml.xml.util.XMLHelper;
+import org.w3c.dom.Attr;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
 
 
 /**
@@ -40,7 +47,8 @@
 implements XACMLAuthzDecisionStatementType
 {
    private RequestContext requestContext;
-   private ResponseContext responseContext; 
+   private ResponseContext responseContext;
+   private Document rootDocument; 
 
    /* 
     * Constructor.
@@ -73,11 +81,47 @@
    public void setRequest(RequestContext request)
    {
       this.requestContext = request;
-   }  
-   
-   /** {@inheritDoc} */
-   public List<XMLObject> getOrderedChildren() 
+   } 
+
+   public Document getOwnerDocument()
    {
-      throw new RuntimeException("Not implemented:getOrderedChildren()"); 
+      return this.rootDocument;
    }
-}
+
+   public void setOwnerDocument(Document doc)
+   {
+      this.rootDocument = doc; 
+   }
+
+   public List<XMLObject> getOrderedChildren()
+   { 
+      return null;
+   }
+
+   /**
+    * @see ElementMappingType#asElement(root)
+    */
+   public Element asElement(Document root)
+   {  
+      if(root == null)
+         throw new IllegalArgumentException("root is null");
+      
+      /**
+        <saml:Statement xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion"  
+        xsi:type="xacml-samlp:XACMLAuthzDecisionStatement" 
+        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   
+        xmlns:xacml-samlp="urn:oasis:xacml:2.0:saml:protocol:schema:os"
+        xmlns:xacml-saml="urn:oasis:names:tc:xacml:2.0:saml:assertion:schema:os" > 
+       */
+      Element element = XMLHelper.constructElement(root,
+            Statement.DEFAULT_ELEMENT_NAME);
+      
+      //Set the xsi:type
+      Attr xsiAttr = XMLHelper.constructAttribute(root, 
+            XMLConstants.XSI_NS, "type", XMLConstants.XSI_PREFIX);
+      xsiAttr.setTextContent("xacml-samlp:XACMLAuthzDecisionStatement");
+      element.setAttributeNodeNS(xsiAttr);  
+     
+      return element;
+   }   
+}
\ No newline at end of file

Modified: projects/security/security-xacml/trunk/jboss-xacml-saml/src/main/java/org/jboss/security/xacml/saml/integration/opensaml/impl/XACMLAuthzDecisionStatementTypeImplBuilder.java
===================================================================
--- projects/security/security-xacml/trunk/jboss-xacml-saml/src/main/java/org/jboss/security/xacml/saml/integration/opensaml/impl/XACMLAuthzDecisionStatementTypeImplBuilder.java	2008-04-03 07:12:35 UTC (rev 71680)
+++ projects/security/security-xacml/trunk/jboss-xacml-saml/src/main/java/org/jboss/security/xacml/saml/integration/opensaml/impl/XACMLAuthzDecisionStatementTypeImplBuilder.java	2008-04-03 07:13:36 UTC (rev 71681)
@@ -49,7 +49,7 @@
 
    @Override
    public XACMLAuthzDecisionStatementType buildObject()
-   { 
+   {
       return null;
    }
 }
\ No newline at end of file

Modified: projects/security/security-xacml/trunk/jboss-xacml-saml/src/main/java/org/jboss/security/xacml/saml/integration/opensaml/impl/XACMLAuthzDecisionStatementTypeMarshaller.java
===================================================================
--- projects/security/security-xacml/trunk/jboss-xacml-saml/src/main/java/org/jboss/security/xacml/saml/integration/opensaml/impl/XACMLAuthzDecisionStatementTypeMarshaller.java	2008-04-03 07:12:35 UTC (rev 71680)
+++ projects/security/security-xacml/trunk/jboss-xacml-saml/src/main/java/org/jboss/security/xacml/saml/integration/opensaml/impl/XACMLAuthzDecisionStatementTypeMarshaller.java	2008-04-03 07:13:36 UTC (rev 71681)
@@ -21,13 +21,18 @@
   */
 package org.jboss.security.xacml.saml.integration.opensaml.impl;
 
+import org.jboss.security.xacml.interfaces.RequestContext;
+import org.jboss.security.xacml.interfaces.ResponseContext;
+import org.jboss.security.xacml.saml.integration.opensaml.types.XACMLAuthzDecisionStatementType;
 import org.opensaml.common.impl.AbstractSAMLObjectMarshaller;
 import org.opensaml.xml.XMLObject;
 import org.opensaml.xml.io.MarshallingException;
+import org.opensaml.xml.util.XMLHelper;
 import org.w3c.dom.Element;
+import org.w3c.dom.Node;
 
 /**
- *  
+ *  Marshaller for XACMLzDecisionStatementType
  *  @author Anil.Saldhana at redhat.com
  *  @since  Apr 2, 2008 
  *  @version $Revision$
@@ -38,7 +43,32 @@
    public Element marshall(XMLObject xmlObject, Element parentElement) 
    throws MarshallingException
    {
-      return super.marshall(xmlObject, parentElement);
-   }
-
+      XACMLAuthzDecisionStatementType xacmlType = (XACMLAuthzDecisionStatementType) xmlObject;
+      
+      Element xacmlDecisionElement = xacmlType.asElement(parentElement.getOwnerDocument());
+      
+      parentElement.appendChild(xacmlDecisionElement);
+      
+      RequestContext requestContext = xacmlType.getRequest();
+      if(requestContext != null)
+      {
+         Node requestRoot = requestContext.getDocumentElement();
+         if(requestRoot != null)
+         { 
+            XMLHelper.adoptElement((Element) requestRoot, parentElement.getOwnerDocument());  
+            xacmlDecisionElement.appendChild(requestRoot);
+         } 
+      }
+      ResponseContext responseContext = xacmlType.getResponse();
+      if(responseContext != null)
+      {
+         Node responseRoot = responseContext.getDocumentElement();
+         if(responseRoot != null)
+         {
+            XMLHelper.adoptElement((Element) responseRoot, parentElement.getOwnerDocument());  
+            xacmlDecisionElement.appendChild(responseRoot);
+         } 
+      } 
+      return parentElement; 
+   } 
 }

Modified: projects/security/security-xacml/trunk/jboss-xacml-saml/src/main/java/org/jboss/security/xacml/saml/integration/opensaml/impl/XACMLAuthzDecisionStatementTypeUnMarshaller.java
===================================================================
--- projects/security/security-xacml/trunk/jboss-xacml-saml/src/main/java/org/jboss/security/xacml/saml/integration/opensaml/impl/XACMLAuthzDecisionStatementTypeUnMarshaller.java	2008-04-03 07:12:35 UTC (rev 71680)
+++ projects/security/security-xacml/trunk/jboss-xacml-saml/src/main/java/org/jboss/security/xacml/saml/integration/opensaml/impl/XACMLAuthzDecisionStatementTypeUnMarshaller.java	2008-04-03 07:13:36 UTC (rev 71681)
@@ -34,7 +34,7 @@
 import org.w3c.dom.Element;
 
 /**
- *  
+ *  Unmarshaller for XACMLAuthzDecisionStatementType
  *  @author Anil.Saldhana at redhat.com
  *  @since  Apr 2, 2008 
  *  @version $Revision$
@@ -88,7 +88,8 @@
          {
             throw new RuntimeException(e);
          } 
-         xacmlAuthzDecisionStatementType.setRequest(requestContext);
+         xacmlAuthzDecisionStatementType.setRequest(requestContext); 
+         xacmlAuthzDecisionStatementType.setOwnerDocument(childElement.getOwnerDocument());
       } 
       else
          if(childElement.getLocalName().equals("Response") 
@@ -105,6 +106,7 @@
                throw new RuntimeException(e);
             } 
             xacmlAuthzDecisionStatementType.setResponse(responseContext);
+            xacmlAuthzDecisionStatementType.setOwnerDocument(childElement.getOwnerDocument());
          }
       else
       super.unmarshallChildElement(xmlObject, childElement);

Modified: projects/security/security-xacml/trunk/jboss-xacml-saml/src/main/java/org/jboss/security/xacml/saml/integration/opensaml/servlets/SAMLXACMLServlet.java
===================================================================
--- projects/security/security-xacml/trunk/jboss-xacml-saml/src/main/java/org/jboss/security/xacml/saml/integration/opensaml/servlets/SAMLXACMLServlet.java	2008-04-03 07:12:35 UTC (rev 71680)
+++ projects/security/security-xacml/trunk/jboss-xacml-saml/src/main/java/org/jboss/security/xacml/saml/integration/opensaml/servlets/SAMLXACMLServlet.java	2008-04-03 07:13:36 UTC (rev 71681)
@@ -23,6 +23,12 @@
 
 import java.io.IOException;
 import java.io.InputStream;
+import java.io.OutputStream;
+import java.io.OutputStreamWriter;
+import java.io.PrintWriter;
+import java.security.AccessController;
+import java.security.PrivilegedActionException;
+import java.security.PrivilegedExceptionAction;
 
 import javax.servlet.ServletException;
 import javax.servlet.http.HttpServlet;
@@ -123,9 +129,6 @@
          logXMLObject(samlObject);
          
          XACMLAuthzDecisionQueryType xacmlRequest = (XACMLAuthzDecisionQueryType)samlObject;
-         RequestContext requestType = xacmlRequest.getRequest();
-         if(requestType == null)
-            throw new RuntimeException("xacml request is null"); 
          
          RequestContext requestContext = xacmlRequest.getRequest();
          if(requestContext == null)
@@ -156,7 +159,21 @@
          assertionImpl.getStatements().add(decision);
          
          samlResponse.getAssertions().add(assertionImpl);
-         logXMLObject(samlResponse);
+         //logXMLObject(samlResponse);
+         
+         MarshallerFactory marshallerFactory = Configuration.getMarshallerFactory();
+         Marshaller samlResponseMarshaller = marshallerFactory.getMarshaller(samlResponse);
+         
+         
+         response.setContentType("text/xml;charset=utf-8");;
+         OutputStream os = response.getOutputStream();
+         OutputStreamWriter osw = new OutputStreamWriter(os , "UTF-8");
+         PrintWriter pw = new PrintWriter(osw);
+         
+         String resp = XMLHelper.nodeToString(samlResponseMarshaller.marshall(samlResponse));
+         log(resp);
+         pw.print(resp);  
+         pw.flush();
       }
       catch (Exception e)
       {
@@ -200,9 +217,18 @@
       }     
    }
    
-   private PolicyDecisionPoint getPDP()
+   private PolicyDecisionPoint getPDP() throws PrivilegedActionException
    {
-      InputStream is = getServletContext().getResourceAsStream("policyConfig.xml");
+      ClassLoader tcl = AccessController.doPrivileged(new PrivilegedExceptionAction<ClassLoader>()
+      {
+         public ClassLoader run() throws Exception
+         {
+             return Thread.currentThread().getContextClassLoader();
+         }
+      });
+      InputStream is = tcl.getResourceAsStream("policyConfig.xml");
+      if(is == null)
+         throw new IllegalStateException("policyConfig.xml could not be located");
       return new JBossPDP(is); 
    }
 }
\ No newline at end of file

Modified: projects/security/security-xacml/trunk/jboss-xacml-saml/src/main/java/org/jboss/security/xacml/saml/integration/opensaml/types/XACMLAuthzDecisionStatementType.java
===================================================================
--- projects/security/security-xacml/trunk/jboss-xacml-saml/src/main/java/org/jboss/security/xacml/saml/integration/opensaml/types/XACMLAuthzDecisionStatementType.java	2008-04-03 07:12:35 UTC (rev 71680)
+++ projects/security/security-xacml/trunk/jboss-xacml-saml/src/main/java/org/jboss/security/xacml/saml/integration/opensaml/types/XACMLAuthzDecisionStatementType.java	2008-04-03 07:13:36 UTC (rev 71681)
@@ -23,10 +23,12 @@
 
 import javax.xml.namespace.QName;
 
+import org.jboss.security.xacml.interfaces.ElementMappingType;
 import org.jboss.security.xacml.interfaces.RequestContext;
 import org.jboss.security.xacml.interfaces.ResponseContext;
 import org.jboss.security.xacml.saml.integration.opensaml.constants.SAMLXACMLConstants;
 import org.opensaml.saml2.core.Statement;
+import org.w3c.dom.Document;
 
 
 /**
@@ -35,7 +37,7 @@
  *  @since  Mar 27, 2008 
  *  @version $Revision$
  */
-public interface XACMLAuthzDecisionStatementType extends Statement
+public interface XACMLAuthzDecisionStatementType extends Statement, ElementMappingType
 {
    /** Element local name. */
    String DEFAULT_ELEMENT_LOCAL_NAME = "XACMLAuthzDecisionStatement"; 
@@ -67,11 +69,14 @@
    QName TYPE_NAME_XACML20 = new QName(SAMLXACMLConstants.SAML2_XACML20P_NS, TYPE_LOCAL_NAME,
            SAMLXACMLConstants.SAML2_XACMLPROTOCOL_PREFIX);
 
-   public RequestContext getRequest();
+   RequestContext getRequest();
 
-   public ResponseContext getResponse();
+   ResponseContext getResponse();
 
-   public void setRequest(RequestContext request);
+   void setRequest(RequestContext request);
  
-   public void setResponse(ResponseContext response); 
-}
+   void setResponse(ResponseContext response); 
+   
+   void setOwnerDocument(Document doc);
+   Document getOwnerDocument();
+}
\ No newline at end of file




More information about the jboss-cvs-commits mailing list