From 3558ff0bdbfe444dea57704a0d2e5f0fc8d6bfb8 Mon Sep 17 00:00:00 2001 From: "lucio.lelii" Date: Thu, 21 May 2015 14:19:37 +0000 Subject: [PATCH] 70: Authetication Token Task-Url: https://support.d4science.org/issues/70 git-svn-id: http://svn.research-infrastructures.eu/public/d4science/gcube/trunk/Common/authorization-common-client@114832 82a268e6-3cf1-43bd-a215-b396298e98cf --- pom.xml | 2 +- .../proxy/DefaultAuthorizationProxy.java | 29 ++++++++++++++----- .../authorizationservice/cl/CallTest.java | 1 + 3 files changed, 24 insertions(+), 8 deletions(-) diff --git a/pom.xml b/pom.xml index ba00c38..41f6a40 100644 --- a/pom.xml +++ b/pom.xml @@ -19,7 +19,7 @@ org.gcube.common - authorization-library + common-authorization [1.0.0-SNAPSHOT,2.0.0-SNAPSHOT) diff --git a/src/main/java/org/gcube/common/authorization/client/proxy/DefaultAuthorizationProxy.java b/src/main/java/org/gcube/common/authorization/client/proxy/DefaultAuthorizationProxy.java index 558f2af..49d9b38 100644 --- a/src/main/java/org/gcube/common/authorization/client/proxy/DefaultAuthorizationProxy.java +++ b/src/main/java/org/gcube/common/authorization/client/proxy/DefaultAuthorizationProxy.java @@ -7,8 +7,8 @@ import java.io.InputStream; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; - -import javax.xml.bind.JAXBContext; +import java.util.HashMap; +import java.util.Map; import org.gcube.common.authorization.client.Binder; import org.gcube.common.authorization.client.Constants; @@ -25,6 +25,8 @@ public class DefaultAuthorizationProxy implements AuthorizationProxy { this.delegate = config; } + private static Map cache = new HashMap(); + @Override public String generate(final String userName, final String role) { Call call = new Call() { @@ -37,9 +39,14 @@ public class DefaultAuthorizationProxy implements AuthorizationProxy { connection.setRequestProperty(Constants.SCOPE_HEADER_ENTRY, ScopeProvider.instance.get()); BufferedReader reader = new BufferedReader(new InputStreamReader((InputStream)connection.getContent())); StringBuilder result = new StringBuilder(); - String line; - while((line = reader.readLine()) != null) - result.append(line); + try{ + String line; + while((line = reader.readLine()) != null) + result.append(line); + }finally{ + if (reader!=null) + reader.close(); + } return result.toString(); } }; @@ -56,14 +63,22 @@ public class DefaultAuthorizationProxy implements AuthorizationProxy { @Override public AuthorizationEntry call(String endpoint) throws Exception { + URL url = new URL(endpoint+"/retrieve/"+token); HttpURLConnection connection = (HttpURLConnection)url.openConnection(); connection.setRequestMethod("GET"); if (connection.getContentLengthLong()<=0) return null; - return (AuthorizationEntry)Binder.getContext().createUnmarshaller().unmarshal((InputStream)connection.getContent()); - + + try(InputStream stream = (InputStream)connection.getContent();){ + AuthorizationEntry entry = (AuthorizationEntry)Binder.getContext().createUnmarshaller().unmarshal(stream); + cache.put(token, entry); + return entry; + } + } }; + if (cache.containsKey(token)) + return cache.get(token); try { return delegate.make(call); } catch (Exception e) { diff --git a/src/test/java/org/gcube/common/authorizationservice/cl/CallTest.java b/src/test/java/org/gcube/common/authorizationservice/cl/CallTest.java index 68242a1..d316ecd 100644 --- a/src/test/java/org/gcube/common/authorizationservice/cl/CallTest.java +++ b/src/test/java/org/gcube/common/authorizationservice/cl/CallTest.java @@ -31,4 +31,5 @@ public class CallTest { System.out.println("token is: "+token); } + }