From c8f58fe2afa3f2f3bdf86846a48cb5a6dd7d503b Mon Sep 17 00:00:00 2001 From: slaws Date: Sun, 30 Nov 2008 13:46:51 +0000 Subject: Tidy jms policy implementations to remove code from the binding and put it into binding wire interceptors. The implication is that the JMS runtime no longer depends on the JMS policy package. Also get rid of split packages in wire format and operation selector packages. Add a binding context to the Tuscany message so that you don't have to keep finding it in the message header. git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@721811 13f79535-47bb-0310-9956-ffa450edef68 --- .../modules/binding-jms-policy/pom.xml | 2 +- ...enAuthenticationReferencePolicyInterceptor.java | 45 ++++++++++++-------- ...TokenAuthenticationReferencePolicyProvider.java | 11 +++-- ...okenAuthenticationServicePolicyInterceptor.java | 49 +++++++++++++--------- ...MSTokenAuthenticationServicePolicyProvider.java | 11 +++-- .../JMSHeaderReferencePolicyInterceptor.java | 10 +++++ .../tuscany/sca/binding/jms/policy/definitions.xml | 2 +- 7 files changed, 86 insertions(+), 44 deletions(-) (limited to 'branches/sca-java-1.x/modules/binding-jms-policy') diff --git a/branches/sca-java-1.x/modules/binding-jms-policy/pom.xml b/branches/sca-java-1.x/modules/binding-jms-policy/pom.xml index ba97f217f4..f44f06d262 100644 --- a/branches/sca-java-1.x/modules/binding-jms-policy/pom.xml +++ b/branches/sca-java-1.x/modules/binding-jms-policy/pom.xml @@ -56,7 +56,7 @@ org.apache.tuscany.sca - tuscany-binding-jms + tuscany-binding-jms-runtime 1.4-SNAPSHOT diff --git a/branches/sca-java-1.x/modules/binding-jms-policy/src/main/java/org/apache/tuscany/sca/binding/jms/policy/authentication/token/JMSTokenAuthenticationReferencePolicyInterceptor.java b/branches/sca-java-1.x/modules/binding-jms-policy/src/main/java/org/apache/tuscany/sca/binding/jms/policy/authentication/token/JMSTokenAuthenticationReferencePolicyInterceptor.java index 17b5da42be..56fffeb817 100644 --- a/branches/sca-java-1.x/modules/binding-jms-policy/src/main/java/org/apache/tuscany/sca/binding/jms/policy/authentication/token/JMSTokenAuthenticationReferencePolicyInterceptor.java +++ b/branches/sca-java-1.x/modules/binding-jms-policy/src/main/java/org/apache/tuscany/sca/binding/jms/policy/authentication/token/JMSTokenAuthenticationReferencePolicyInterceptor.java @@ -19,8 +19,12 @@ package org.apache.tuscany.sca.binding.jms.policy.authentication.token; +import javax.jms.JMSException; import javax.security.auth.Subject; +import org.apache.tuscany.sca.binding.jms.context.JMSBindingContext; +import org.apache.tuscany.sca.binding.jms.impl.JMSBindingConstants; +import org.apache.tuscany.sca.binding.jms.impl.JMSBindingException; import org.apache.tuscany.sca.interfacedef.Operation; import org.apache.tuscany.sca.invocation.Interceptor; import org.apache.tuscany.sca.invocation.Invoker; @@ -38,14 +42,12 @@ import org.apache.tuscany.sca.policy.authentication.token.TokenPrincipal; public class JMSTokenAuthenticationReferencePolicyInterceptor implements Interceptor { private Invoker next; - private Operation operation; private PolicySet policySet = null; private String context; private JMSTokenAuthenticationPolicy policy; - public JMSTokenAuthenticationReferencePolicyInterceptor(String context, Operation operation, PolicySet policySet) { + public JMSTokenAuthenticationReferencePolicyInterceptor(String context, PolicySet policySet) { super(); - this.operation = operation; this.policySet = policySet; this.context = context; init(); @@ -63,20 +65,29 @@ public class JMSTokenAuthenticationReferencePolicyInterceptor implements Interce } public Message invoke(Message msg) { - // could call out here to some 3rd party system to get credentials - - if ( policy.getTokenName() != null){ - - Subject subject = SecurityUtil.getSubject(msg); - TokenPrincipal principal = SecurityUtil.getPrincipal(subject, TokenPrincipal.class); - - if (principal == null){ - principal = new TokenPrincipal("SomeJMSAuthorizationToken"); - subject.getPrincipals().add(principal); - } - } - - return getNext().invoke(msg); + try { + javax.jms.Message jmsMsg = msg.getBody(); + + if ( policy.getTokenName() != null){ + + Subject subject = SecurityUtil.getSubject(msg); + TokenPrincipal principal = SecurityUtil.getPrincipal(subject, TokenPrincipal.class); + + if (principal == null){ + // should call out here to some 3rd party system to get credentials + // and correct token. Here we are just putting in the token name + principal = new TokenPrincipal("DummyTokenID"); + subject.getPrincipals().add(principal); + } + + jmsMsg.setStringProperty(policy.getTokenName().toString(), principal.getName()); + } + + return getNext().invoke(msg); + + } catch (JMSException e) { + throw new JMSBindingException(e); + } } public Invoker getNext() { diff --git a/branches/sca-java-1.x/modules/binding-jms-policy/src/main/java/org/apache/tuscany/sca/binding/jms/policy/authentication/token/JMSTokenAuthenticationReferencePolicyProvider.java b/branches/sca-java-1.x/modules/binding-jms-policy/src/main/java/org/apache/tuscany/sca/binding/jms/policy/authentication/token/JMSTokenAuthenticationReferencePolicyProvider.java index 610bf758d1..a982e69ffd 100644 --- a/branches/sca-java-1.x/modules/binding-jms-policy/src/main/java/org/apache/tuscany/sca/binding/jms/policy/authentication/token/JMSTokenAuthenticationReferencePolicyProvider.java +++ b/branches/sca-java-1.x/modules/binding-jms-policy/src/main/java/org/apache/tuscany/sca/binding/jms/policy/authentication/token/JMSTokenAuthenticationReferencePolicyProvider.java @@ -29,13 +29,14 @@ import org.apache.tuscany.sca.policy.PolicySet; import org.apache.tuscany.sca.policy.PolicySetAttachPoint; import org.apache.tuscany.sca.policy.util.PolicyHandler; import org.apache.tuscany.sca.provider.PolicyProvider; +import org.apache.tuscany.sca.provider.PolicyProviderRRB; import org.apache.tuscany.sca.runtime.RuntimeComponent; import org.apache.tuscany.sca.runtime.RuntimeComponentReference; /** * @version $Rev$ $Date$ */ -public class JMSTokenAuthenticationReferencePolicyProvider implements PolicyProvider { +public class JMSTokenAuthenticationReferencePolicyProvider implements PolicyProviderRRB { private RuntimeComponent component; private RuntimeComponentReference reference; private Binding binding; @@ -76,9 +77,13 @@ public class JMSTokenAuthenticationReferencePolicyProvider implements PolicyProv * @see org.apache.tuscany.sca.provider.PolicyProvider#createInterceptor(org.apache.tuscany.sca.interfacedef.Operation) */ public Interceptor createInterceptor(Operation operation) { - PolicySet ps = findPolicySet(); - return ps == null ? null : new JMSTokenAuthenticationReferencePolicyInterceptor(getContext(), operation, ps); + return null; } + + public Interceptor createBindingInterceptor() { + PolicySet ps = findPolicySet(); + return ps == null ? null : new JMSTokenAuthenticationReferencePolicyInterceptor(getContext(), ps); + } /** * @see org.apache.tuscany.sca.provider.PolicyProvider#getPhase() diff --git a/branches/sca-java-1.x/modules/binding-jms-policy/src/main/java/org/apache/tuscany/sca/binding/jms/policy/authentication/token/JMSTokenAuthenticationServicePolicyInterceptor.java b/branches/sca-java-1.x/modules/binding-jms-policy/src/main/java/org/apache/tuscany/sca/binding/jms/policy/authentication/token/JMSTokenAuthenticationServicePolicyInterceptor.java index ec3be6e165..c8d28ad5db 100644 --- a/branches/sca-java-1.x/modules/binding-jms-policy/src/main/java/org/apache/tuscany/sca/binding/jms/policy/authentication/token/JMSTokenAuthenticationServicePolicyInterceptor.java +++ b/branches/sca-java-1.x/modules/binding-jms-policy/src/main/java/org/apache/tuscany/sca/binding/jms/policy/authentication/token/JMSTokenAuthenticationServicePolicyInterceptor.java @@ -19,13 +19,13 @@ package org.apache.tuscany.sca.binding.jms.policy.authentication.token; -import java.security.Principal; +import javax.jms.JMSException; import javax.security.auth.Subject; -import javax.xml.namespace.QName; -import org.apache.tuscany.sca.assembly.xml.Constants; -import org.apache.tuscany.sca.interfacedef.Operation; +import org.apache.tuscany.sca.binding.jms.context.JMSBindingContext; +import org.apache.tuscany.sca.binding.jms.impl.JMSBindingConstants; +import org.apache.tuscany.sca.binding.jms.impl.JMSBindingException; import org.apache.tuscany.sca.invocation.Interceptor; import org.apache.tuscany.sca.invocation.Invoker; import org.apache.tuscany.sca.invocation.Message; @@ -34,21 +34,19 @@ import org.apache.tuscany.sca.policy.SecurityUtil; import org.apache.tuscany.sca.policy.authentication.token.TokenPrincipal; /** - * Policy handler to handle PolicySet related to Logging with the QName + * Policy handler to handle token based authentication * {http://tuscany.apache.org/xmlns/sca/1.0/impl/java}LoggingPolicy * * @version $Rev$ $Date$ */ public class JMSTokenAuthenticationServicePolicyInterceptor implements Interceptor { private Invoker next; - private Operation operation; private PolicySet policySet = null; private String context; private JMSTokenAuthenticationPolicy policy; - public JMSTokenAuthenticationServicePolicyInterceptor(String context, Operation operation, PolicySet policySet) { + public JMSTokenAuthenticationServicePolicyInterceptor(String context, PolicySet policySet) { super(); - this.operation = operation; this.policySet = policySet; this.context = context; init(); @@ -66,17 +64,30 @@ public class JMSTokenAuthenticationServicePolicyInterceptor implements Intercept } public Message invoke(Message msg) { - Subject subject = SecurityUtil.getSubject(msg); - TokenPrincipal principal = SecurityUtil.getPrincipal(subject, TokenPrincipal.class); - - if (principal != null) { - System.out.println("Token: " + principal.getName()); - - // call out here to some 3rd party system to do whatever you - // need to authenticate the principal - } - - return getNext().invoke(msg); + try{ + // get the jms context + JMSBindingContext context = msg.getBindingContext(); + javax.jms.Message jmsMsg = context.getJmsMsg(); + + String token = jmsMsg.getStringProperty(policy.getTokenName().toString()); + + Subject subject = SecurityUtil.getSubject(msg); + TokenPrincipal principal = SecurityUtil.getPrincipal(subject, TokenPrincipal.class); + + if (principal == null){ + principal = new TokenPrincipal(token); + subject.getPrincipals().add(principal); + } + + System.out.println("JMS service received token: " + principal.getName()); + + // call out here to some 3rd party system to do whatever you + // need to authenticate the principal + + return getNext().invoke(msg); + } catch (JMSException e) { + throw new JMSBindingException(e); + } } public Invoker getNext() { diff --git a/branches/sca-java-1.x/modules/binding-jms-policy/src/main/java/org/apache/tuscany/sca/binding/jms/policy/authentication/token/JMSTokenAuthenticationServicePolicyProvider.java b/branches/sca-java-1.x/modules/binding-jms-policy/src/main/java/org/apache/tuscany/sca/binding/jms/policy/authentication/token/JMSTokenAuthenticationServicePolicyProvider.java index 4278c1e595..209bd4becf 100644 --- a/branches/sca-java-1.x/modules/binding-jms-policy/src/main/java/org/apache/tuscany/sca/binding/jms/policy/authentication/token/JMSTokenAuthenticationServicePolicyProvider.java +++ b/branches/sca-java-1.x/modules/binding-jms-policy/src/main/java/org/apache/tuscany/sca/binding/jms/policy/authentication/token/JMSTokenAuthenticationServicePolicyProvider.java @@ -29,13 +29,14 @@ import org.apache.tuscany.sca.policy.PolicySet; import org.apache.tuscany.sca.policy.PolicySetAttachPoint; import org.apache.tuscany.sca.policy.util.PolicyHandler; import org.apache.tuscany.sca.provider.PolicyProvider; +import org.apache.tuscany.sca.provider.PolicyProviderRRB; import org.apache.tuscany.sca.runtime.RuntimeComponent; import org.apache.tuscany.sca.runtime.RuntimeComponentService; /** * @version $Rev$ $Date$ */ -public class JMSTokenAuthenticationServicePolicyProvider implements PolicyProvider { +public class JMSTokenAuthenticationServicePolicyProvider implements PolicyProviderRRB { private RuntimeComponent component; private RuntimeComponentService service; private Binding binding; @@ -74,9 +75,13 @@ public class JMSTokenAuthenticationServicePolicyProvider implements PolicyProvid * @see org.apache.tuscany.sca.provider.PolicyProvider#createInterceptor(org.apache.tuscany.sca.interfacedef.Operation) */ public Interceptor createInterceptor(Operation operation) { - PolicySet ps = findPolicySet(); - return ps == null ? null : new JMSTokenAuthenticationServicePolicyInterceptor(getContext(), operation, ps); + return null; } + + public Interceptor createBindingInterceptor() { + PolicySet ps = findPolicySet(); + return ps == null ? null : new JMSTokenAuthenticationServicePolicyInterceptor(getContext(), ps); + } /** * @see org.apache.tuscany.sca.provider.PolicyProvider#getPhase() diff --git a/branches/sca-java-1.x/modules/binding-jms-policy/src/main/java/org/apache/tuscany/sca/binding/jms/policy/header/JMSHeaderReferencePolicyInterceptor.java b/branches/sca-java-1.x/modules/binding-jms-policy/src/main/java/org/apache/tuscany/sca/binding/jms/policy/header/JMSHeaderReferencePolicyInterceptor.java index 19069378ef..58100cfb8d 100644 --- a/branches/sca-java-1.x/modules/binding-jms-policy/src/main/java/org/apache/tuscany/sca/binding/jms/policy/header/JMSHeaderReferencePolicyInterceptor.java +++ b/branches/sca-java-1.x/modules/binding-jms-policy/src/main/java/org/apache/tuscany/sca/binding/jms/policy/header/JMSHeaderReferencePolicyInterceptor.java @@ -26,7 +26,9 @@ import javax.jms.JMSException; import javax.security.auth.Subject; import org.apache.tuscany.sca.assembly.Binding; +import org.apache.tuscany.sca.binding.jms.context.JMSBindingContext; import org.apache.tuscany.sca.binding.jms.impl.JMSBinding; +import org.apache.tuscany.sca.binding.jms.impl.JMSBindingConstants; import org.apache.tuscany.sca.binding.jms.impl.JMSBindingException; import org.apache.tuscany.sca.binding.jms.policy.JMSBindingDefinitionsProvider; import org.apache.tuscany.sca.interfacedef.Operation; @@ -80,6 +82,9 @@ public class JMSHeaderReferencePolicyInterceptor implements Interceptor { public Message invoke(Message msg) { try { + // get the jms context + JMSBindingContext context = msg.getBindingContext(); + javax.jms.Message jmsMsg = msg.getBody(); String operationName = msg.getOperation().getName(); @@ -113,6 +118,11 @@ public class JMSHeaderReferencePolicyInterceptor implements Interceptor { jmsMsg.setObjectProperty(propName, jmsHeaderPolicy.getProperties().get(propName)); } } + + if (jmsHeaderPolicy != null && + jmsHeaderPolicy.getTimeToLive() != null) { + context.setTimeToLive(jmsHeaderPolicy.getTimeToLive()); + } return getNext().invoke(msg); } catch (JMSException e) { diff --git a/branches/sca-java-1.x/modules/binding-jms-policy/src/main/resources/org/apache/tuscany/sca/binding/jms/policy/definitions.xml b/branches/sca-java-1.x/modules/binding-jms-policy/src/main/resources/org/apache/tuscany/sca/binding/jms/policy/definitions.xml index 66ec011844..c87079dd54 100644 --- a/branches/sca-java-1.x/modules/binding-jms-policy/src/main/resources/org/apache/tuscany/sca/binding/jms/policy/definitions.xml +++ b/branches/sca-java-1.x/modules/binding-jms-policy/src/main/resources/org/apache/tuscany/sca/binding/jms/policy/definitions.xml @@ -72,7 +72,7 @@ - Messages are meduim priority + Messages are medium priority -- cgit v1.2.3