From 03c097ddac120fb4480663a3804356015ec43fb7 Mon Sep 17 00:00:00 2001 From: Lucio Lelii Date: Tue, 29 Sep 2015 10:02:55 +0000 Subject: [PATCH] AuthorizationToken maangement added CAllerMethod management added git-svn-id: http://svn.research-infrastructures.eu/public/d4science/gcube/branches/common/common-gcore-stubs/1.0@119137 82a268e6-3cf1-43bd-a215-b396298e98cf --- .classpath | 4 +-- pom.xml | 15 ++++++--- .../clients/stubs/jaxws/StubFactory.java | 5 ++- .../jaxws/handlers/AuthorizationHandler.java | 26 +++++++++++++++ .../jaxws/handlers/ClientInfoHandler.java | 8 +++++ .../stubs/jaxws/handlers/ScopeHandler.java | 2 -- .../jaxws/proxies/GenericProxyFactory.java | 15 +++++++++ .../stubs/jaxws/proxies/MethodRetriever.java | 32 +++++++++++++++++++ ...n.clients.stubs.jaxws.handlers.CallHandler | 1 + 9 files changed, 98 insertions(+), 10 deletions(-) create mode 100644 src/main/java/org/gcube/common/clients/stubs/jaxws/handlers/AuthorizationHandler.java create mode 100644 src/main/java/org/gcube/common/clients/stubs/jaxws/proxies/GenericProxyFactory.java create mode 100644 src/main/java/org/gcube/common/clients/stubs/jaxws/proxies/MethodRetriever.java diff --git a/.classpath b/.classpath index 953de0b..e43402f 100644 --- a/.classpath +++ b/.classpath @@ -22,12 +22,12 @@ - + - + diff --git a/pom.xml b/pom.xml index 0239e8a..11d55fb 100644 --- a/pom.xml +++ b/pom.xml @@ -8,7 +8,7 @@ org.gcube.core common-gcore-stubs - 1.2.0-SNAPSHOT + 1.2.1-SNAPSHOT GCore Stubs JAXWS Stub Support for gCore Service @@ -35,17 +35,22 @@ common-scope [1.1.0-SNAPSHOT,2.0.0-SNAPSHOT) - - - + + org.gcube.common + common-authorization + [1.0.0-SNAPSHOT,2.0.0-SNAPSHOT) + + + + org.slf4j slf4j-simple 1.6.4 test - + diff --git a/src/main/java/org/gcube/common/clients/stubs/jaxws/StubFactory.java b/src/main/java/org/gcube/common/clients/stubs/jaxws/StubFactory.java index 9ced1c6..a02b5fe 100644 --- a/src/main/java/org/gcube/common/clients/stubs/jaxws/StubFactory.java +++ b/src/main/java/org/gcube/common/clients/stubs/jaxws/StubFactory.java @@ -19,6 +19,7 @@ import javax.xml.ws.wsaddressing.W3CEndpointReferenceBuilder; import org.gcube.common.clients.stubs.jaxws.StubFactoryDSL.AtClause; import org.gcube.common.clients.stubs.jaxws.handlers.GCoreJAXWSHandler; +import org.gcube.common.clients.stubs.jaxws.proxies.GenericProxyFactory; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -107,12 +108,14 @@ public class StubFactory implements StubFactoryDSL.AtClause { // get JAXWS stub T stub = service.getPort(reference,target.type(),features); + + BindingProvider provider = (BindingProvider) stub; // configure stub for gCube calls registerHandler(provider, target); - return stub; + return GenericProxyFactory.getProxy(target.type(), stub); } catch (Error e) { //bad stubs/wsdls cause java.lang.Errors diff --git a/src/main/java/org/gcube/common/clients/stubs/jaxws/handlers/AuthorizationHandler.java b/src/main/java/org/gcube/common/clients/stubs/jaxws/handlers/AuthorizationHandler.java new file mode 100644 index 0000000..ccbca2b --- /dev/null +++ b/src/main/java/org/gcube/common/clients/stubs/jaxws/handlers/AuthorizationHandler.java @@ -0,0 +1,26 @@ +package org.gcube.common.clients.stubs.jaxws.handlers; + +import javax.xml.namespace.QName; +import javax.xml.soap.SOAPHeader; +import javax.xml.ws.handler.soap.SOAPMessageContext; + +import org.gcube.common.authorization.library.provider.SecurityTokenProvider; +import org.gcube.common.clients.stubs.jaxws.GCoreService; + +public class AuthorizationHandler extends AbstractHandler { + + /** Namespace of scope-related headers */ + public static final String TOKEN_NS = "http://gcube-system.org/namespaces/gcube-token"; + + /** Name of the scope call header. */ + public static final String TOKEN_HEADER_NAME = "gcube-token"; + public static final QName TOKEN_QNAME = new QName(TOKEN_NS,TOKEN_HEADER_NAME); + + @Override + public void handleRequest(GCoreService target, SOAPHeader header, SOAPMessageContext context) throws Exception { + String token = SecurityTokenProvider.instance.get(); + if (token!=null) + addHeader(header,TOKEN_QNAME, token); + } +} + diff --git a/src/main/java/org/gcube/common/clients/stubs/jaxws/handlers/ClientInfoHandler.java b/src/main/java/org/gcube/common/clients/stubs/jaxws/handlers/ClientInfoHandler.java index 37fa209..38caf21 100644 --- a/src/main/java/org/gcube/common/clients/stubs/jaxws/handlers/ClientInfoHandler.java +++ b/src/main/java/org/gcube/common/clients/stubs/jaxws/handlers/ClientInfoHandler.java @@ -4,6 +4,7 @@ import javax.xml.namespace.QName; import javax.xml.soap.SOAPHeader; import javax.xml.ws.handler.soap.SOAPMessageContext; +import org.gcube.common.authorization.library.provider.CalledMethodProvider; import org.gcube.common.clients.stubs.jaxws.GCoreService; /** @@ -21,9 +22,16 @@ public class ClientInfoHandler extends AbstractHandler { public static final String CALLER_NS = "http://gcube-system.org/namespaces/caller"; public static final QName CALLER_QNAME = new QName(CALLER_NS,CALLER_HEADER_NAME); + + public static final String CALLED_METHOD_HEADER_NAME = "gcube-method"; + /** Namespace of scope-related headers */ + public static final String CALLED_METHOD_NS = "http://gcube-system.org/namespaces/method"; + + public static final QName CALLED_METHOD_QNAME = new QName(CALLED_METHOD_NS,CALLED_METHOD_HEADER_NAME); @Override public void handleRequest(GCoreService target, SOAPHeader header, SOAPMessageContext context) throws Exception { addHeader(header,CALLER_QNAME, target.clientId()); + addHeader(header, CALLED_METHOD_QNAME, CalledMethodProvider.instance.get()); } } diff --git a/src/main/java/org/gcube/common/clients/stubs/jaxws/handlers/ScopeHandler.java b/src/main/java/org/gcube/common/clients/stubs/jaxws/handlers/ScopeHandler.java index eb510a0..f97704e 100644 --- a/src/main/java/org/gcube/common/clients/stubs/jaxws/handlers/ScopeHandler.java +++ b/src/main/java/org/gcube/common/clients/stubs/jaxws/handlers/ScopeHandler.java @@ -24,8 +24,6 @@ public class ScopeHandler extends AbstractHandler { @Override public void handleRequest(GCoreService target, SOAPHeader header, SOAPMessageContext context) throws Exception { String scope = ScopeProvider.instance.get(); - if (scope==null) - throw new IllegalStateException("no scope is defined for this call"); addHeader(header,SCOPE_QNAME, scope); } } diff --git a/src/main/java/org/gcube/common/clients/stubs/jaxws/proxies/GenericProxyFactory.java b/src/main/java/org/gcube/common/clients/stubs/jaxws/proxies/GenericProxyFactory.java new file mode 100644 index 0000000..277695f --- /dev/null +++ b/src/main/java/org/gcube/common/clients/stubs/jaxws/proxies/GenericProxyFactory.java @@ -0,0 +1,15 @@ +package org.gcube.common.clients.stubs.jaxws.proxies; + +import java.lang.reflect.Proxy; + +public class GenericProxyFactory { + + @SuppressWarnings("unchecked") + public static T getProxy(Class intf, + final I obj) { + return (T) + Proxy.newProxyInstance(obj.getClass().getClassLoader(), + new Class[] { intf }, + new MethodRetriever(obj)); + } +} \ No newline at end of file diff --git a/src/main/java/org/gcube/common/clients/stubs/jaxws/proxies/MethodRetriever.java b/src/main/java/org/gcube/common/clients/stubs/jaxws/proxies/MethodRetriever.java new file mode 100644 index 0000000..b10242c --- /dev/null +++ b/src/main/java/org/gcube/common/clients/stubs/jaxws/proxies/MethodRetriever.java @@ -0,0 +1,32 @@ +package org.gcube.common.clients.stubs.jaxws.proxies; + +import java.lang.reflect.InvocationHandler; +import java.lang.reflect.Method; + +import org.gcube.common.authorization.library.provider.CalledMethodProvider; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class MethodRetriever implements InvocationHandler{ + + public static Logger log = LoggerFactory.getLogger(MethodRetriever.class); + + private T service; + + public MethodRetriever(T service){ + this.service= service; + } + + public Object invoke(Object proxy, Method method, + Object[] args) throws Throwable { + CalledMethodProvider.instance.set(method.getName()); + try{ + return method.invoke(service, args); + }finally{ + CalledMethodProvider.instance.reset(); + } + } + + + +} diff --git a/src/main/resources/META-INF/services/org.gcube.common.clients.stubs.jaxws.handlers.CallHandler b/src/main/resources/META-INF/services/org.gcube.common.clients.stubs.jaxws.handlers.CallHandler index 34f8b70..5be2097 100644 --- a/src/main/resources/META-INF/services/org.gcube.common.clients.stubs.jaxws.handlers.CallHandler +++ b/src/main/resources/META-INF/services/org.gcube.common.clients.stubs.jaxws.handlers.CallHandler @@ -1,4 +1,5 @@ org.gcube.common.clients.stubs.jaxws.handlers.ScopeHandler +org.gcube.common.clients.stubs.jaxws.handlers.AuthorizationHandler org.gcube.common.clients.stubs.jaxws.handlers.TargetServiceHandler org.gcube.common.clients.stubs.jaxws.handlers.ClientInfoHandler org.gcube.common.clients.stubs.jaxws.handlers.LegacyWSAddressingHandler \ No newline at end of file