You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by my...@apache.org on 2014/09/09 08:49:03 UTC
svn commit: r1623676 - in /sling/trunk/bundles:
resourceaccesssecurity/core/src/main/java/org/apache/sling/resourceaccesssecurity/
resourceaccesssecurity/core/src/main/java/org/apache/sling/resourceaccesssecurity/impl/
resourceresolver/src/main/java/or...
Author: mykee
Date: Tue Sep 9 06:49:02 2014
New Revision: 1623676
URL: http://svn.apache.org/r1623676
Log:
SLING-3917 - Add transformQuery support to the ResourceAccessSecurity Implementation
Modified:
sling/trunk/bundles/resourceaccesssecurity/core/src/main/java/org/apache/sling/resourceaccesssecurity/ResourceAccessGate.java
sling/trunk/bundles/resourceaccesssecurity/core/src/main/java/org/apache/sling/resourceaccesssecurity/impl/ResourceAccessSecurityImpl.java
sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/tree/ProviderHandler.java
sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/tree/RootResourceProviderEntry.java
Modified: sling/trunk/bundles/resourceaccesssecurity/core/src/main/java/org/apache/sling/resourceaccesssecurity/ResourceAccessGate.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/resourceaccesssecurity/core/src/main/java/org/apache/sling/resourceaccesssecurity/ResourceAccessGate.java?rev=1623676&r1=1623675&r2=1623676&view=diff
==============================================================================
--- sling/trunk/bundles/resourceaccesssecurity/core/src/main/java/org/apache/sling/resourceaccesssecurity/ResourceAccessGate.java (original)
+++ sling/trunk/bundles/resourceaccesssecurity/core/src/main/java/org/apache/sling/resourceaccesssecurity/ResourceAccessGate.java Tue Sep 9 06:49:02 2014
@@ -187,7 +187,8 @@ public interface ResourceAccessGate {
* the language in which the query is expressed
* @param resourceResolver
* the resource resolver which resolves the query
- * @return the transformed query
+ * @return the transformed query or the original query if no tranformation
+ * took place. This method should never return <code>null</code>
* @throws AccessSecurityException
*/
public String transformQuery(String query, String language,
Modified: sling/trunk/bundles/resourceaccesssecurity/core/src/main/java/org/apache/sling/resourceaccesssecurity/impl/ResourceAccessSecurityImpl.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/resourceaccesssecurity/core/src/main/java/org/apache/sling/resourceaccesssecurity/impl/ResourceAccessSecurityImpl.java?rev=1623676&r1=1623675&r2=1623676&view=diff
==============================================================================
--- sling/trunk/bundles/resourceaccesssecurity/core/src/main/java/org/apache/sling/resourceaccesssecurity/impl/ResourceAccessSecurityImpl.java (original)
+++ sling/trunk/bundles/resourceaccesssecurity/core/src/main/java/org/apache/sling/resourceaccesssecurity/impl/ResourceAccessSecurityImpl.java Tue Sep 9 06:49:02 2014
@@ -339,7 +339,20 @@ public abstract class ResourceAccessSecu
final String language,
final ResourceResolver resourceResolver)
throws AccessSecurityException {
- return query;
+ String returnValue = query;
+
+ for (ResourceAccessGateHandler handler : allHandlers) {
+ returnValue = handler.getResourceAccessGate().transformQuery(
+ returnValue, language, resourceResolver);
+ if (returnValue == null) {
+ throw new AccessSecurityException(
+ "Method transformQuery in ResourceAccessGate "
+ + handler.getResourceAccessGate().getClass()
+ .getName() + " returned null.");
+ }
+ }
+
+ return returnValue;
}
/**
Modified: sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/tree/ProviderHandler.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/tree/ProviderHandler.java?rev=1623676&r1=1623675&r2=1623676&view=diff
==============================================================================
--- sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/tree/ProviderHandler.java (original)
+++ sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/tree/ProviderHandler.java Tue Sep 9 06:49:02 2014
@@ -30,11 +30,14 @@ import org.apache.sling.api.resource.Que
import org.apache.sling.api.resource.Resource;
import org.apache.sling.api.resource.ResourceProvider;
import org.apache.sling.api.resource.ResourceResolver;
+import org.apache.sling.api.security.AccessSecurityException;
import org.apache.sling.api.security.ResourceAccessSecurity;
import org.apache.sling.commons.osgi.PropertiesUtil;
import org.apache.sling.resourceresolver.impl.ResourceAccessSecurityTracker;
import org.apache.sling.resourceresolver.impl.helper.ResourceResolverContext;
import org.osgi.framework.Constants;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
/**
* The provider handler is the common base class for the
@@ -43,6 +46,9 @@ import org.osgi.framework.Constants;
*/
public abstract class ProviderHandler implements Comparable<ProviderHandler> {
+ /** Default logger */
+ private final Logger logger = LoggerFactory.getLogger(getClass());
+
/** Service properties. */
private final Map<String, Object> properties;
@@ -183,6 +189,45 @@ public abstract class ProviderHandler im
/**
* applies resource access security if configured
*/
+ protected String transformQuery ( final ResourceResolverContext ctx, final ResourceResolver resolver, final String query, final String language ) {
+ final ResourceAccessSecurityTracker tracker = ctx.getResourceAccessSecurityTracker();
+
+ String returnValue = query;
+
+ if (useResourceAccessSecurity) {
+ final ResourceAccessSecurity resourceAccessSecurity = tracker
+ .getProviderResourceAccessSecurity();
+ if (resourceAccessSecurity != null) {
+ try {
+ returnValue = resourceAccessSecurity.transformQuery(
+ returnValue, language, resolver);
+ } catch (AccessSecurityException e) {
+ logger.error(
+ "AccessSecurityException occurred while trying to transform the query {} (language {}).",
+ new Object[] { query, language }, e);
+ }
+ }
+ }
+
+ final ResourceAccessSecurity resourceAccessSecurity = tracker
+ .getApplicationResourceAccessSecurity();
+ if (resourceAccessSecurity != null) {
+ try {
+ returnValue = resourceAccessSecurity.transformQuery(
+ returnValue, language, resolver);
+ } catch (AccessSecurityException e) {
+ logger.error(
+ "AccessSecurityException occurred while trying to transform the query {} (language {}).",
+ new Object[] { query, language }, e);
+ }
+ }
+
+ return returnValue;
+ }
+
+ /**
+ * applies resource access security if configured
+ */
protected Iterator<Resource> getReadableChildrenIterator ( final ResourceResolverContext ctx, final Iterator<Resource> childrenIterator ) {
Iterator<Resource> returnValue = null;
if ( childrenIterator != null ) {
Modified: sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/tree/RootResourceProviderEntry.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/tree/RootResourceProviderEntry.java?rev=1623676&r1=1623675&r2=1623676&view=diff
==============================================================================
--- sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/tree/RootResourceProviderEntry.java (original)
+++ sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/tree/RootResourceProviderEntry.java Tue Sep 9 06:49:02 2014
@@ -143,8 +143,9 @@ public class RootResourceProviderEntry e
nextResourceIter = null;
while ( i.hasNext() && nextResourceIter == null ) {
final QueriableResourceProvider adap = i.next();
- nextResourceIter = adap.findResources(resolver, query, language);
actProviderHandler = queriableProviders.getProviderHandler(ctx, adap);
+ String transformedQuery = actProviderHandler.transformQuery(ctx, resolver, query, language);
+ nextResourceIter = adap.findResources(resolver, transformedQuery, language);
}
}
if ( nextResourceIter != null ) {