Author: mckierna
Date: Fri Nov 23 03:45:13 2007
New Revision: 597648
URL: http://svn.apache.org/viewvc?rev=597648&view=rev
Log:
RSP: some security refactoring to make checks easier
Modified:
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/handlers/SandeshaGlobalInHandler.java
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/msgprocessors/AckRequestedProcessor.java
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/msgprocessors/AcknowledgementProcessor.java
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/msgprocessors/CloseSequenceProcessor.java
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/msgprocessors/CreateSeqResponseMsgProcessor.java
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/msgprocessors/MakeConnectionProcessor.java
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/msgprocessors/SequenceProcessor.java
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/msgprocessors/TerminateSeqMsgProcessor.java
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/msgprocessors/TerminateSeqResponseMsgProcessor.java
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/util/SandeshaUtil.java
webservices/sandesha/trunk/java/modules/tests/src/test/java/org/apache/sandesha2/security/UnitTestSecurityManager.java
Modified:
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/handlers/SandeshaGlobalInHandler.java
URL:
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/handlers/SandeshaGlobalInHandler.java?rev=597648&r1=597647&r2=597648&view=diff
==============================================================================
---
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/handlers/SandeshaGlobalInHandler.java
(original)
+++
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/handlers/SandeshaGlobalInHandler.java
Fri Nov 23 03:45:13 2007
@@ -23,7 +23,6 @@
import javax.xml.namespace.QName;
-import org.apache.axiom.om.OMElement;
import org.apache.axiom.soap.SOAPBody;
import org.apache.axiom.soap.SOAPEnvelope;
import org.apache.axiom.soap.SOAPHeader;
@@ -43,8 +42,6 @@
import org.apache.sandesha2.client.SandeshaClientConstants;
import org.apache.sandesha2.i18n.SandeshaMessageHelper;
import org.apache.sandesha2.i18n.SandeshaMessageKeys;
-import org.apache.sandesha2.security.SecurityManager;
-import org.apache.sandesha2.security.SecurityToken;
import org.apache.sandesha2.storage.StorageManager;
import org.apache.sandesha2.storage.Transaction;
import org.apache.sandesha2.storage.beanmanagers.RMDBeanMgr;
@@ -177,24 +174,16 @@
RMDBeanMgr mgr = storageManager.getRMDBeanMgr();
RMDBean bean = mgr.retrieve(sequenceId);
- if(bean != null && bean.getSecurityTokenData() != null) {
- SecurityManager secManager =
SandeshaUtil.getSecurityManager(rmMsgCtx.getConfigurationContext());
-
- QName seqName = new QName(rmMsgCtx.getRMNamespaceValue(),
Sandesha2Constants.WSRM_COMMON.SEQUENCE);
-
- SOAPEnvelope envelope = rmMsgCtx.getSOAPEnvelope();
- OMElement body = envelope.getBody();
- OMElement seqHeader =
envelope.getHeader().getFirstChildWithName(seqName);
-
- SecurityToken token =
secManager.recoverSecurityToken(bean.getSecurityTokenData());
-
- secManager.checkProofOfPossession(token, seqHeader,
rmMsgCtx.getMessageContext());
- secManager.checkProofOfPossession(token, body,
rmMsgCtx.getMessageContext());
- }
-
MessageContext messageContext = rmMsgCtx.getMessageContext();
-
- if (bean != null) {
+
+ if(bean != null){
+
+ //first check the security credentials of the msg is necessary
+ SandeshaUtil.assertProofOfPossession(bean, messageContext,
messageContext.getEnvelope().getBody());
+ SandeshaUtil.assertProofOfPossession(bean, messageContext,
+
messageContext.getEnvelope().getHeader().getFirstChildWithName(new
QName(rmMsgCtx.getRMNamespaceValue(),
+
Sandesha2Constants.WSRM_COMMON.SEQUENCE)));
+
if (msgNo == 0) {
String message =
SandeshaMessageHelper.getMessage(SandeshaMessageKeys.invalidMsgNumber, Long
@@ -224,16 +213,16 @@
//still allow this msg if we have no corresponding invoker bean
for it and we are inOrder
if(SandeshaUtil.isInOrder(rmMsgCtx.getMessageContext()))
{
- InvokerBean finderBean = new InvokerBean();
- finderBean.setMsgNo(msgNo);
- finderBean.setSequenceID(sequenceId);
- List invokerBeanList =
storageManager.getInvokerBeanMgr().find(finderBean);
- if((invokerBeanList==null || invokerBeanList.size()==0)
- && bean.getNextMsgNoToProcess()<=msgNo){
- isDuplicate = false;
- if (log.isDebugEnabled())
- log.debug("Allowing completed message on sequence " +
sequenceId + ", msgNo " + msgNo);
- }
+ InvokerBean finderBean = new InvokerBean();
+ finderBean.setMsgNo(msgNo);
+ finderBean.setSequenceID(sequenceId);
+ List invokerBeanList =
storageManager.getInvokerBeanMgr().find(finderBean);
+ if((invokerBeanList==null || invokerBeanList.size()==0)
+ && bean.getNextMsgNoToProcess()<=msgNo){
+ isDuplicate = false;
+ if (log.isDebugEnabled())
+ log.debug("Allowing completed message on sequence " +
sequenceId + ", msgNo " + msgNo);
+ }
}
if(isDuplicate){
Modified:
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/msgprocessors/AckRequestedProcessor.java
URL:
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/msgprocessors/AckRequestedProcessor.java?rev=597648&r1=597647&r2=597648&view=diff
==============================================================================
---
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/msgprocessors/AckRequestedProcessor.java
(original)
+++
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/msgprocessors/AckRequestedProcessor.java
Fri Nov 23 03:45:13 2007
@@ -111,12 +111,10 @@
// Check that the sender of this AckRequest holds the correct
token
RMDBean rmdBean =
SandeshaUtil.getRMDBeanFromSequenceId(storageManager, sequenceId);
-
- if(rmdBean != null && rmdBean.getSecurityTokenData() != null) {
- SecurityManager secManager =
SandeshaUtil.getSecurityManager(configurationContext);
- SecurityToken token =
secManager.recoverSecurityToken(rmdBean.getSecurityTokenData());
-
- secManager.checkProofOfPossession(token, soapHeader,
msgContext);
+
+ //check security credentials
+ if(rmdBean!=null){
+ SandeshaUtil.assertProofOfPossession(rmdBean,
msgContext, soapHeader);
}
// Check that the sequence requested exists
Modified:
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/msgprocessors/AcknowledgementProcessor.java
URL:
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/msgprocessors/AcknowledgementProcessor.java?rev=597648&r1=597647&r2=597648&view=diff
==============================================================================
---
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/msgprocessors/AcknowledgementProcessor.java
(original)
+++
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/msgprocessors/AcknowledgementProcessor.java
Fri Nov 23 03:45:13 2007
@@ -121,12 +121,7 @@
// Check that the sender of this Ack holds the correct token
String internalSequenceId = rmsBean.getInternalSequenceID();
- if(rmsBean.getSecurityTokenData() != null) {
- SecurityManager secManager =
SandeshaUtil.getSecurityManager(configCtx);
- SecurityToken token =
secManager.recoverSecurityToken(rmsBean.getSecurityTokenData());
-
- secManager.checkProofOfPossession(token, soapHeader,
msgCtx);
- }
+ SandeshaUtil.assertProofOfPossession(rmsBean, msgCtx,
soapHeader);
if(log.isDebugEnabled()) log.debug("Got Ack for RM Sequence: "
+ outSequenceId + ", internalSeqId: " + internalSequenceId);
Iterator ackRangeIterator =
sequenceAck.getAcknowledgementRanges().iterator();
Modified:
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/msgprocessors/CloseSequenceProcessor.java
URL:
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/msgprocessors/CloseSequenceProcessor.java?rev=597648&r1=597647&r2=597648&view=diff
==============================================================================
---
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/msgprocessors/CloseSequenceProcessor.java
(original)
+++
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/msgprocessors/CloseSequenceProcessor.java
Fri Nov 23 03:45:13 2007
@@ -75,14 +75,9 @@
.getAxisConfiguration());
RMDBean rmdBean =
SandeshaUtil.getRMDBeanFromSequenceId(storageManager, sequenceId);
-
- // Check that the sender of this CloseSequence holds the
correct token
- if(rmdBean != null && rmdBean.getSecurityTokenData() != null) {
- SecurityManager secManager =
SandeshaUtil.getSecurityManager(msgCtx.getConfigurationContext());
- OMElement body = msgCtx.getEnvelope().getBody();
- SecurityToken token =
secManager.recoverSecurityToken(rmdBean.getSecurityTokenData());
- secManager.checkProofOfPossession(token, body, msgCtx);
- }
+
+ //check the security credentials
+ SandeshaUtil.assertProofOfPossession(rmdBean, msgCtx,
msgCtx.getEnvelope().getBody());
if (FaultManager.checkForUnknownSequence(rmMsgCtx, sequenceId,
storageManager, false)) {
if (log.isDebugEnabled())
Modified:
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/msgprocessors/CreateSeqResponseMsgProcessor.java
URL:
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/msgprocessors/CreateSeqResponseMsgProcessor.java?rev=597648&r1=597647&r2=597648&view=diff
==============================================================================
---
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/msgprocessors/CreateSeqResponseMsgProcessor.java
(original)
+++
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/msgprocessors/CreateSeqResponseMsgProcessor.java
Fri Nov 23 03:45:13 2007
@@ -21,7 +21,6 @@
import java.util.Iterator;
-import org.apache.axiom.om.OMElement;
import org.apache.axis2.AxisFault;
import org.apache.axis2.addressing.EndpointReference;
import org.apache.axis2.addressing.RelatesTo;
@@ -37,8 +36,6 @@
import org.apache.sandesha2.i18n.SandeshaMessageHelper;
import org.apache.sandesha2.i18n.SandeshaMessageKeys;
import org.apache.sandesha2.policy.SandeshaPolicyBean;
-import org.apache.sandesha2.security.SecurityManager;
-import org.apache.sandesha2.security.SecurityToken;
import org.apache.sandesha2.storage.StorageManager;
import org.apache.sandesha2.storage.Transaction;
import org.apache.sandesha2.storage.beanmanagers.RMSBeanMgr;
@@ -113,14 +110,8 @@
}
// Check that the create sequence response message proves
possession of the correct token
- String tokenData = rmsBean.getSecurityTokenData();
- if(tokenData != null) {
- SecurityManager secManager =
SandeshaUtil.getSecurityManager(configCtx);
- MessageContext crtSeqResponseCtx =
createSeqResponseRMMsgCtx.getMessageContext();
- OMElement body =
crtSeqResponseCtx.getEnvelope().getBody();
- SecurityToken token =
secManager.recoverSecurityToken(tokenData);
- secManager.checkProofOfPossession(token, body,
crtSeqResponseCtx);
- }
+ MessageContext msgCtx =
createSeqResponseRMMsgCtx.getMessageContext();
+ SandeshaUtil.assertProofOfPossession(rmsBean, msgCtx,
msgCtx.getEnvelope().getBody());
String internalSequenceId = rmsBean.getInternalSequenceID();
if (internalSequenceId == null ||
"".equals(internalSequenceId)) {
Modified:
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/msgprocessors/MakeConnectionProcessor.java
URL:
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/msgprocessors/MakeConnectionProcessor.java?rev=597648&r1=597647&r2=597648&view=diff
==============================================================================
---
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/msgprocessors/MakeConnectionProcessor.java
(original)
+++
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/msgprocessors/MakeConnectionProcessor.java
Fri Nov 23 03:45:13 2007
@@ -21,6 +21,7 @@
import java.util.Collection;
import java.util.Iterator;
+import java.util.List;
import java.util.Random;
import org.apache.axis2.AxisFault;
@@ -39,10 +40,14 @@
import org.apache.sandesha2.SandeshaException;
import org.apache.sandesha2.i18n.SandeshaMessageHelper;
import org.apache.sandesha2.i18n.SandeshaMessageKeys;
+import org.apache.sandesha2.security.SecurityManager;
+import org.apache.sandesha2.security.SecurityToken;
import org.apache.sandesha2.storage.StorageManager;
import org.apache.sandesha2.storage.Transaction;
import org.apache.sandesha2.storage.beanmanagers.SenderBeanMgr;
+import org.apache.sandesha2.storage.beans.RMDBean;
import org.apache.sandesha2.storage.beans.RMSBean;
+import org.apache.sandesha2.storage.beans.RMSequenceBean;
import org.apache.sandesha2.storage.beans.SenderBean;
import org.apache.sandesha2.util.MsgInitializer;
import org.apache.sandesha2.util.SandeshaUtil;
@@ -72,24 +77,66 @@
if(log.isDebugEnabled()) log.debug("Enter:
MakeConnectionProcessor::processInMessage " +
rmMsgCtx.getSOAPEnvelope().getBody());
MakeConnection makeConnection = (MakeConnection)
rmMsgCtx.getMakeConnection();
+
Address address = makeConnection.getAddress();
Identifier identifier = makeConnection.getIdentifier();
+ //some initial setup
ConfigurationContext configurationContext =
rmMsgCtx.getConfigurationContext();
StorageManager storageManager =
SandeshaUtil.getSandeshaStorageManager(configurationContext,configurationContext.getAxisConfiguration());
+ SecurityManager secManager =
SandeshaUtil.getSecurityManager(configurationContext);
+ SecurityToken token =
secManager.getSecurityToken(rmMsgCtx.getMessageContext());
+ //we want to find valid sender beans
+ SenderBean findSenderBean = new SenderBean();
+ if(token!=null){
+ if(log.isDebugEnabled()) log.debug("token found " +
token);
+ //this means we have to scope our search for sender
beans that belong to sequences that own the same token
+ String data = secManager.getTokenRecoveryData(token);
+ //first look for RMS beans
+ RMSBean finderRMS = new RMSBean();
+ finderRMS.setSecurityTokenData(data);
+ List possibleBeans =
storageManager.getRMSBeanMgr().find(finderRMS);
+
+ //try looking for RMD beans too
+ RMDBean finderRMD = new RMDBean();
+ finderRMD.setSecurityTokenData(data);
+ List tempList =
storageManager.getRMDBeanMgr().find(finderRMD);
+
+ //combine these two into one list
+ possibleBeans.addAll(tempList);
+
+ int size = possibleBeans.size();
+
+ if(size>0){
+ //select one at random: TODO better method?
+ Random random = new Random ();
+ int itemToPick = random.nextInt(size);
+ RMSequenceBean selectedSequence =
(RMSequenceBean)possibleBeans.get(itemToPick);
+
findSenderBean.setSequenceID(selectedSequence.getSequenceID());
+ if(log.isDebugEnabled()) log.debug("sequence
selected " + findSenderBean.getSequenceID());
+ }
+ else{
+ //we cannot match a RMD with the correct
security credentials so we cannot process this msg under RSP
+ if(log.isDebugEnabled()) log.debug("Exit:
MakeConnectionProcessor::processInMessage : no RM sequence bean with security
credentials" );
+ //return false; //TODO put this in once tested
live
+ }
+ }
+
+ //lookup a sender bean
SenderBeanMgr senderBeanMgr = storageManager.getSenderBeanMgr();
//selecting the set of SenderBeans that suit the given criteria.
- SenderBean findSenderBean = new SenderBean ();
findSenderBean.setSend(true);
findSenderBean.setTransportAvailable(false);
if (address!=null)
findSenderBean.setToAddress(address.getAddress());
- if (identifier!=null)
+ if (identifier!=null){
+ if(log.isDebugEnabled()) log.debug("identifier set,
this violates RSP " + identifier);
findSenderBean.setSequenceID(identifier.getIdentifier());
+ }
// Set the time to send field to be now
findSenderBean.setTimeToSend(System.currentTimeMillis());
Modified:
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/msgprocessors/SequenceProcessor.java
URL:
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/msgprocessors/SequenceProcessor.java?rev=597648&r1=597647&r2=597648&view=diff
==============================================================================
---
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/msgprocessors/SequenceProcessor.java
(original)
+++
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/msgprocessors/SequenceProcessor.java
Fri Nov 23 03:45:13 2007
@@ -112,20 +112,11 @@
RMDBeanMgr mgr = storageManager.getRMDBeanMgr();
RMDBean bean = mgr.retrieve(sequenceId);
- if(bean != null && bean.getSecurityTokenData() != null) {
- SecurityManager secManager =
SandeshaUtil.getSecurityManager(msgCtx.getConfigurationContext());
-
- QName seqName = new
QName(rmMsgCtx.getRMNamespaceValue(), Sandesha2Constants.WSRM_COMMON.SEQUENCE);
-
- SOAPEnvelope envelope = msgCtx.getEnvelope();
- OMElement body = envelope.getBody();
- OMElement seqHeader =
envelope.getHeader().getFirstChildWithName(seqName);
-
- SecurityToken token =
secManager.recoverSecurityToken(bean.getSecurityTokenData());
-
- secManager.checkProofOfPossession(token, seqHeader,
msgCtx);
- secManager.checkProofOfPossession(token, body, msgCtx);
- }
+ //check the security credentials
+ SandeshaUtil.assertProofOfPossession(bean, msgCtx,
msgCtx.getEnvelope().getHeader().
+ getFirstChildWithName(new
QName(rmMsgCtx.getRMNamespaceValue(),
Sandesha2Constants.WSRM_COMMON.SEQUENCE)));
+ SandeshaUtil.assertProofOfPossession(bean, msgCtx,
msgCtx.getEnvelope().getBody());
+
// Store the inbound sequence id, number and lastMessage onto
the operation context
OperationContext opCtx = msgCtx.getOperationContext();
Modified:
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/msgprocessors/TerminateSeqMsgProcessor.java
URL:
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/msgprocessors/TerminateSeqMsgProcessor.java?rev=597648&r1=597647&r2=597648&view=diff
==============================================================================
---
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/msgprocessors/TerminateSeqMsgProcessor.java
(original)
+++
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/msgprocessors/TerminateSeqMsgProcessor.java
Fri Nov 23 03:45:13 2007
@@ -95,12 +95,10 @@
// Check that the sender of this TerminateSequence holds the
correct token
RMDBean rmdBean =
SandeshaUtil.getRMDBeanFromSequenceId(storageManager, sequenceId);
- if(rmdBean != null && rmdBean.getSecurityTokenData() != null) {
- SecurityManager secManager =
SandeshaUtil.getSecurityManager(context);
- OMElement body =
terminateSeqRMMsg.getSOAPEnvelope().getBody();
- SecurityToken token =
secManager.recoverSecurityToken(rmdBean.getSecurityTokenData());
- secManager.checkProofOfPossession(token, body,
terminateSeqRMMsg.getMessageContext());
- }
+
+ //check security credentials
+ SandeshaUtil.assertProofOfPossession(rmdBean, terminateSeqMsg,
+ terminateSeqMsg.getEnvelope().getBody());
if (FaultManager.checkForUnknownSequence(terminateSeqRMMsg,
sequenceId, storageManager, false)) {
if (log.isDebugEnabled())
Modified:
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/msgprocessors/TerminateSeqResponseMsgProcessor.java
URL:
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/msgprocessors/TerminateSeqResponseMsgProcessor.java?rev=597648&r1=597647&r2=597648&view=diff
==============================================================================
---
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/msgprocessors/TerminateSeqResponseMsgProcessor.java
(original)
+++
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/msgprocessors/TerminateSeqResponseMsgProcessor.java
Fri Nov 23 03:45:13 2007
@@ -19,7 +19,6 @@
package org.apache.sandesha2.msgprocessors;
-import org.apache.axiom.om.OMElement;
import org.apache.axis2.AxisFault;
import org.apache.axis2.context.ConfigurationContext;
import org.apache.axis2.context.MessageContext;
@@ -28,8 +27,6 @@
import org.apache.sandesha2.RMMsgContext;
import org.apache.sandesha2.Sandesha2Constants;
import org.apache.sandesha2.polling.PollingManager;
-import org.apache.sandesha2.security.SecurityManager;
-import org.apache.sandesha2.security.SecurityToken;
import org.apache.sandesha2.storage.StorageManager;
import org.apache.sandesha2.storage.Transaction;
import org.apache.sandesha2.storage.beanmanagers.RMDBeanMgr;
@@ -60,14 +57,9 @@
String sequenceId = tsResponse.getIdentifier().getIdentifier();
RMSBean rmsBean =
SandeshaUtil.getRMSBeanFromSequenceId(storageManager, sequenceId);
-
- // Check that the sender of this TerminateSequence holds the
correct token
- if(rmsBean != null && rmsBean.getSecurityTokenData() != null) {
- SecurityManager secManager =
SandeshaUtil.getSecurityManager(context);
- OMElement body =
terminateResRMMsg.getSOAPEnvelope().getBody();
- SecurityToken token =
secManager.recoverSecurityToken(rmsBean.getSecurityTokenData());
- secManager.checkProofOfPossession(token, body,
msgContext);
- }
+
+ //check security credentials
+ SandeshaUtil.assertProofOfPossession(rmsBean, msgContext,
msgContext.getEnvelope().getBody());
msgContext.setProperty(Sandesha2Constants.MessageContextProperties.INTERNAL_SEQUENCE_ID,rmsBean.getInternalSequenceID());
Modified:
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/util/SandeshaUtil.java
URL:
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/util/SandeshaUtil.java?rev=597648&r1=597647&r2=597648&view=diff
==============================================================================
---
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/util/SandeshaUtil.java
(original)
+++
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/util/SandeshaUtil.java
Fri Nov 23 03:45:13 2007
@@ -69,6 +69,7 @@
import org.apache.sandesha2.i18n.SandeshaMessageKeys;
import org.apache.sandesha2.policy.SandeshaPolicyBean;
import org.apache.sandesha2.security.SecurityManager;
+import org.apache.sandesha2.security.SecurityToken;
import org.apache.sandesha2.storage.StorageManager;
import org.apache.sandesha2.storage.beanmanagers.RMDBeanMgr;
import org.apache.sandesha2.storage.beanmanagers.RMSBeanMgr;
@@ -463,6 +464,25 @@
}
+ public static void assertProofOfPossession(RMSequenceBean bean,
MessageContext context, OMElement elementToCheck)throws SandeshaException{
+ if (log.isDebugEnabled())
+ log.debug("Enter: SandeshaUtil::assertProofOfPossession
:" + bean + ", " + context + ", " + elementToCheck);
+
+ String tokenData = null;
+ if(bean!=null){
+ tokenData = bean.getSecurityTokenData();
+ }
+ if(tokenData != null) {
+ if (log.isDebugEnabled()) log.debug("debug:" +
tokenData);
+ SecurityManager secManager =
SandeshaUtil.getSecurityManager(context.getConfigurationContext());
+ SecurityToken token =
secManager.recoverSecurityToken(tokenData);
+ secManager.checkProofOfPossession(token,
elementToCheck, context); //this will exception if there is no proof
+ }
+
+ if (log.isDebugEnabled())
+ log.debug("Exit:
SandeshaUtil::assertProofOfPossession");
+ }
+
public static void copyConfiguredProperties (MessageContext
fromMessage, MessageContext toMessage) throws AxisFault {
@@ -622,7 +642,6 @@
}
public static long getLastMessageNumber(String internalSequenceID,
StorageManager storageManager)throws SandeshaException {
-
RMSBean rMSBean =
getRMSBeanFromInternalSequenceId(storageManager, internalSequenceID);
long lastMessageNumber = 0;
if(rMSBean!=null){
@@ -835,10 +854,11 @@
Parameter classLoaderParam =
config.getParameter(Sandesha2Constants.MODULE_CLASS_LOADER);
if(classLoaderParam != null) classLoader =
(ClassLoader) classLoaderParam.getValue();
+
if (classLoader==null)
throw new SandeshaException
(SandeshaMessageHelper.getMessage(SandeshaMessageKeys.classLoaderNotFound));
- Class c = classLoader.loadClass(className);
+ Class c = classLoader.loadClass(className);
Class configContextClass = context.getClass();
Constructor constructor = c.getConstructor(new Class[]
{ configContextClass });
@@ -850,6 +870,7 @@
}
return (SecurityManager) obj;
+
} catch (Exception e) {
String message =
SandeshaMessageHelper.getMessage(SandeshaMessageKeys.cannotInitSecurityManager,
e.toString());
throw new SandeshaException(message,e);
@@ -1120,6 +1141,11 @@
if (log.isDebugEnabled())
log.debug("Unreliable operation");
result = true;
}
+ else if(null != unreliableParam &&
"false".equals(unreliable)){
+ //a forced reliable message
+ if (log.isDebugEnabled())
log.debug("Forced reliable message context");
+ result = false;
+ }
}
}
Modified:
webservices/sandesha/trunk/java/modules/tests/src/test/java/org/apache/sandesha2/security/UnitTestSecurityManager.java
URL:
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/modules/tests/src/test/java/org/apache/sandesha2/security/UnitTestSecurityManager.java?rev=597648&r1=597647&r2=597648&view=diff
==============================================================================
---
webservices/sandesha/trunk/java/modules/tests/src/test/java/org/apache/sandesha2/security/UnitTestSecurityManager.java
(original)
+++
webservices/sandesha/trunk/java/modules/tests/src/test/java/org/apache/sandesha2/security/UnitTestSecurityManager.java
Fri Nov 23 03:45:13 2007
@@ -41,7 +41,6 @@
private static Log log =
LogFactory.getLog(UnitTestSecurityManager.class);
private static HashMap tokens = new HashMap();
- private static int id = 0;
private static String secNamespace =
Sandesha2Constants.SPEC_2005_02.SEC_NS_URI;
private static QName unitTestHeader = new
QName("http://unit.test.security", "tokenId");
@@ -58,7 +57,7 @@
{
log.debug("Enter:
UnitTestSecurityManager::getSecurityToken(MessageContext)");
- UnitTestSecurityToken result = new UnitTestSecurityToken(id++);
+ UnitTestSecurityToken result = new UnitTestSecurityToken(1);
//use the same token for all messages in unit test
tokens.put(getTokenRecoveryData(result), result);
log.debug("Exit: UnitTestSecurityManager::getSecurityToken " +
result);
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]