[ 
https://issues.apache.org/jira/browse/SLING-1432?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Carsten Ziegeler resolved SLING-1432.
-------------------------------------

    Resolution: Not A Problem

Your filter is a component filter and therefore comes too late in the game. A 
component filter is called whenever a component = script is invoked for 
rendering. This happens after the resource is resolved.
Unfortunately making this filter a sling request filter (filter.scope=request), 
doesn't solve your problem either as event sling request filters are called 
after the resource is resolved. 
It works in the POST case as a POST is intended to create new resources.

Depending on the OSGi http service implementation you might be able to register 
a real servlet filter for the whole sling web application. This filter would 
run before Sling and solve your problem.

Another solution I see (which I would rather consider a workaround) would be to 
post/get to a path like /resources/XYZ while you store content 
in the repository at /data/X/Y/Z. In this case you can register your own 
servlet through the http service at /resources and simple forward from
there to /data/ which is handled by Sling.

> Unable to Forward to Images via a Filter
> ----------------------------------------
>
>                 Key: SLING-1432
>                 URL: https://issues.apache.org/jira/browse/SLING-1432
>             Project: Sling
>          Issue Type: Bug
>          Components: Extensions, Servlets
>            Reporter: Jason Rose
>         Attachments: uuid_filter_problem.log, UuidFilter.java
>
>
> In my current application, I store nodes with the name of the node being a 
> uuid generated by a sproutcore client.  Because this doesn't directly lend 
> itself to a deep node hierarchy, I have a filter in place that buckets these 
> uuids into two more levels based on the first four characters in the uuid.  
> I'd like this process to be transparent to the front end, so I use the filter.
> The filter itself is very simple.  It checks the request.getPathInfo() for 
> any uuids, buckets them according to a built-in strategy, then uses the 
> request dispatcher to forward to the new path.
> i.e:
> posting to /test/foo/abbaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa ends up creating a 
> node at /test/foo/ab/ba/abbaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa.  Accessing 
> '/test/foo/abbaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa.xml' filters it to 
> '/test/foo/ab/ba/abbaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa.xml' and it works 
> correctly.
> This sort of approach seems to solve all the performance problems in 
> jackrabbit and works in the general case, like when there isn't an obvious 
> way to naturally get a deep hierarchy.
> Something breaks, though, when I try to bucket images.  The node is posted 
> correctly, but when I try to get it via the filter in the url, I get a 404.  
> If I put an image with the same name under the unbucketed path using 
> something like DAV, requesting an unbucketed resource that gets resolved by 
> my filter will return the image I uploaded manually.
> i.e:
> posting to /test/foo/abbaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa/img.jpg ends up 
> creating a node at 
> /test/foo/ab/ba/abbaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa/img.jpg.
> Accessing '/test/foo/abbaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa/img.jpg' leads to a 
> 404.
> Accessing '/test/foo/ab/ba/abbaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa/img.jpg' 
> returns the correct resource.
> Putting a new image also called img.jpg under 
> /test/foo/abbaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa with a dav, then hitting the 
> first path in the browser will the image stored at the bucketed path.
> It seems to me that the prep work done by sling before executing the filters 
> leads to a dirty state that disallows me from forwarding to a new path in my 
> filter.  Is there a way to clean up the request's state?

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to