big and fat +1 from me :) regards
antonio On Aug 18, 2014, at 11:23 AM, Felix Meschberger <[email protected]> wrote: > Hi all > > I had various discussions around execution of Servlet API Filters in the > Sling Engine. > > To recap: Currently all filters are always called. The service.ranking (or > filter.order) service registration property can be used to define the order > in which the filters are called and the filter.scope property is required to > indicate at what stage in the request processing a filter has to be called. > See [1] for the full story. > > Turns out, that it would be good to have some simple and global flags to > indicate when a filter should actually be called or not. This would be > similar to the filter mappings of traditional web applications, where filters > are bound to URL paths and/or servlets. > > So I am proposing to introduce three new service registration properties, > which may be set on Servlet Filter services handled by the Sling Engine: > > * filter.path: The Filter is only called if the path of the > current Resource (SlingHttpServletRequest.getResource) > matches any of the given paths. If the property is > not set, the filter will always be called. > * filter.resourceType: The Filter is only called if the resourceType > of the current Resource (SlingHttpServletRequest.getResource) > matches any of the given resource types. If the property is > not set, the filter will always be called. > * filter.ignore: The Filter is never called if this property > is set to any "true". > > > The implementation would be as follows: > > * The FilterListEntry class is augmented with a method to verify whether to > call the filter at all > * The AbstractSlingFilterChain.doFilter method is augmented to call this new > method and to not call a filter for which the match fails. A > RequestProgressTracker entry is generated for filters not called indicating > why it has not been called. > > Further extensions could be: > > * filter.expression: some scripting expression evaluating to > a boolean. If true the filter is called. > * Filter service implements a new interface providing an filter > expression method returning a boolean. If true the filter > is called (comparable to the option servlet). > > Regards > Felix > > [1] http://sling.apache.org/documentation/the-sling-engine/filters.html
