You are viewing a plain text version of this content. The canonical link for it is here.
Posted to rampart-dev@ws.apache.org by ru...@apache.org on 2007/12/19 12:44:33 UTC
svn commit: r605516 - in /webservices/rampart/trunk/java/modules:
rampart-core/src/main/java/org/apache/rampart/handler/PostDispatchVerificationHandler.java
rampart-core/src/main/java/org/apache/rampart/handler/RampartReceiver.java
rampart-mar/module.xml
Author: ruchithf
Date: Wed Dec 19 03:44:31 2007
New Revision: 605516
URL: http://svn.apache.org/viewvc?rev=605516&view=rev
Log:
Fixed RAMPART-127
Added:
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/handler/PostDispatchVerificationHandler.java
Modified:
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/handler/RampartReceiver.java
webservices/rampart/trunk/java/modules/rampart-mar/module.xml
Added: webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/handler/PostDispatchVerificationHandler.java
URL: http://svn.apache.org/viewvc/webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/handler/PostDispatchVerificationHandler.java?rev=605516&view=auto
==============================================================================
--- webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/handler/PostDispatchVerificationHandler.java (added)
+++ webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/handler/PostDispatchVerificationHandler.java Wed Dec 19 03:44:31 2007
@@ -0,0 +1,135 @@
+/*
+ * Copyright 2004,2005 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.rampart.handler;
+
+import org.apache.axiom.om.OMElement;
+import org.apache.axis2.AxisFault;
+import org.apache.axis2.context.MessageContext;
+import org.apache.axis2.description.HandlerDescription;
+import org.apache.axis2.description.Parameter;
+import org.apache.axis2.engine.Handler;
+import org.apache.neethi.Assertion;
+import org.apache.neethi.Policy;
+import org.apache.neethi.PolicyEngine;
+import org.apache.rampart.RampartMessageData;
+import org.apache.ws.secpolicy.model.Binding;
+import org.apache.ws.security.handler.WSHandlerConstants;
+
+import java.util.Iterator;
+import java.util.List;
+
+/**
+ * Handler to verify the message security after dispatch
+ *
+ */
+public class PostDispatchVerificationHandler implements Handler {
+
+ private HandlerDescription handlerDesc;
+
+ /**
+ * @see org.apache.axis2.engine.Handler#cleanup()
+ */
+ public void cleanup() {
+ }
+
+ /**
+ * @see org.apache.axis2.engine.Handler#flowComplete(org.apache.axis2.context.MessageContext)
+ */
+ public void flowComplete(MessageContext msgContext) {
+ }
+
+ /**
+ * @see org.apache.axis2.engine.Handler#getHandlerDesc()
+ */
+ public HandlerDescription getHandlerDesc() {
+ return this.handlerDesc;
+ }
+
+ /**
+ * @see org.apache.axis2.engine.Handler#getName()
+ */
+ public String getName() {
+ return "Post dispatch security verification handler";
+ }
+
+ /**
+ * @see org.apache.axis2.engine.Handler#getParameter(java.lang.String)
+ */
+ public Parameter getParameter(String name) {
+ return this.handlerDesc.getParameter(name);
+ }
+
+ /**
+ * @see org.apache.axis2.engine.Handler#init(org.apache.axis2.description.HandlerDescription)
+ */
+ public void init(HandlerDescription handlerDesc) {
+ this.handlerDesc = handlerDesc;
+ }
+
+ /**
+ * @see org.apache.axis2.engine.Handler#invoke(org.apache.axis2.context.MessageContext)
+ */
+ public InvocationResponse invoke(MessageContext msgContext)
+ throws AxisFault {
+ Policy policy = msgContext.getEffectivePolicy();
+
+
+ if(msgContext.getProperty(RampartMessageData.KEY_RAMPART_POLICY) != null) {
+ policy = (Policy)msgContext.getProperty(RampartMessageData.KEY_RAMPART_POLICY);
+ }
+
+
+ if(policy == null) {
+ policy = msgContext.getEffectivePolicy();
+ }
+
+ if(policy == null) {
+ Parameter param = msgContext.getParameter(RampartMessageData.KEY_RAMPART_POLICY);
+ if(param != null) {
+ OMElement policyElem = param.getParameterElement().getFirstElement();
+ policy = PolicyEngine.getPolicy(policyElem);
+ }
+ }
+
+ if(policy == null) {
+ return InvocationResponse.CONTINUE;
+ }
+
+ Iterator alternatives = policy.getAlternatives();
+
+ boolean securityPolicyPresent = false;
+ if(alternatives.hasNext()) {
+ List assertions = (List)alternatives.next();
+ for (Iterator iterator = assertions.iterator(); iterator.hasNext();) {
+ Assertion assertion = (Assertion) iterator.next();
+ //Check for any *Binding assertion
+ if (assertion instanceof Binding) {
+ securityPolicyPresent = true;
+ }
+ }
+ }
+
+ //Now check for security processing results if security policy is available
+ if(securityPolicyPresent && msgContext.getProperty(WSHandlerConstants.RECV_RESULTS) == null) {
+ throw new AxisFault("InvalidSecurity");
+ }
+
+ return InvocationResponse.CONTINUE;
+
+ }
+
+}
Modified: webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/handler/RampartReceiver.java
URL: http://svn.apache.org/viewvc/webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/handler/RampartReceiver.java?rev=605516&r1=605515&r2=605516&view=diff
==============================================================================
--- webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/handler/RampartReceiver.java (original)
+++ webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/handler/RampartReceiver.java Wed Dec 19 03:44:31 2007
@@ -21,11 +21,9 @@
import org.apache.axiom.soap.SOAPHeaderBlock;
import org.apache.axis2.AxisFault;
import org.apache.axis2.context.MessageContext;
-import org.apache.axis2.context.OperationContext;
import org.apache.axis2.description.HandlerDescription;
import org.apache.axis2.description.Parameter;
import org.apache.axis2.engine.Handler;
-import org.apache.axis2.wsdl.WSDLConstants;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.rampart.RampartConstants;
@@ -33,7 +31,6 @@
import org.apache.rampart.RampartException;
import org.apache.ws.secpolicy.WSSPolicyException;
import org.apache.ws.security.WSConstants;
-import org.apache.ws.security.WSSecurityEngineResult;
import org.apache.ws.security.WSSecurityException;
import org.apache.ws.security.handler.WSHandlerConstants;
import org.apache.ws.security.handler.WSHandlerResult;
Modified: webservices/rampart/trunk/java/modules/rampart-mar/module.xml
URL: http://svn.apache.org/viewvc/webservices/rampart/trunk/java/modules/rampart-mar/module.xml?rev=605516&r1=605515&r2=605516&view=diff
==============================================================================
--- webservices/rampart/trunk/java/modules/rampart-mar/module.xml (original)
+++ webservices/rampart/trunk/java/modules/rampart-mar/module.xml Wed Dec 19 03:44:31 2007
@@ -12,6 +12,10 @@
<handler name="SecurityInHandler" class="org.apache.rampart.handler.WSDoAllReceiver">
<order phase="Security"/>
</handler>
+ <handler name="PostDispatchVerificationHandler" class="org.apache.rampart.handler.PostDispatchVerificationHandler">
+ <order phase="Dispatch" phaseLast="true"/>
+ </handler>
+
</InFlow>
<OutFlow>