sling-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Andreas Schaefer Sr." <schaef...@me.com>
Subject Re: Parameter Support, Filters and Missing Parameters
Date Mon, 20 Feb 2017 21:45:02 GMT
Hi Julian

Thanks for the help.

I tried to figure out how the I18NFilter is registered in Sling but it eludes me.
Any hint would be appreciated.

Cheers - Andy

> On Feb 20, 2017, at 1:47 AM, Julian Sedding <jsedding@gmail.com> wrote:
> 
> Hi Andy
> 
> You can register a javax.servlet.Filter with Sling OR with the Felix
> Whiteboard. If you want to run before the SlingMainServlet, you have
> to register your filter in the Felix whiteboard (which is what the
> I18NFilter does). Note that you will not have access to
> SlingHttpServletRequest objects in that case.
> 
> The documentation for the Felix Whiteboard describes properties to
> select a specific HTTP context[0] by adding some properties. Maybe
> that helps you to get your code working.
> 
> Regards
> Julian
> 
> [0] https://felix.apache.org/documentation/subprojects/apache-felix-http-service.html#filter-service-properties
<https://felix.apache.org/documentation/subprojects/apache-felix-http-service.html#filter-service-properties>
> 
> 
> On Sat, Feb 18, 2017 at 1:59 AM, Andreas Schaefer Sr. <schaefera@me.com <mailto:schaefera@me.com>>
wrote:
>> Hi
>> 
>> I tried to create a Filter to showcase the issue but I do fail with the latest
>> code base.
>> 
>> The reason is that I cannot add a filter ahead of the Sling Main Servlet even
>> though there is the I18N and SSL Filter that are running ahead of it.
>> For a customer I use that in order to adjust the query string and the parameters
>> and of late also the session timeout (bug in felix).
>> 
>> Funny thing is that my filter is called when I access the OSGi Console then
>> the filter is called just not when I work with a sling page (slingshot).
>> 
>> Question: is is still possible to add a filter ahead of Sling Main Servlet and if
>> so what are the configuration. This is what I tried:
>> 
>> 1) Does only work if sling some is enabled but then I am not ahead of the Sling Main
Servlet
>> 
>> //@Component( immediate = true, label="Parameter Issue Filter", description="Filters
Requests to demonstrate the Parameter Issue in Sling", metatype=false )
>> //@Service
>> //@Properties(
>> //    {
>> //        @Property( name="service.description", value="Parameter Issue Filter" ),
>> //        @Property( name="service.vendor", value="Adobe" ),
>> ////        @Property(name="sling.filter.scope", value="request")
>> //        @Property( name="pattern", value="/", propertyPrivate=true )
>> //    }
>> //)
>> 
>> 2) Taken from the SslFilter but I am not ahead of the Sling Main Servlet
>> 
>> //@SlingFilter(generateService = true, label = "Parameter Issue Filter",
>> //    order = 500, scope = { SlingFilterScope.REQUEST, SlingFilterScope.ERROR })
>> //@Properties({
>> //    @Property(name = "pattern", value="/.*"),
>> //    @Property(name = Constants.SERVICE_DESCRIPTION, value = "Filters Requests to
demonstrate the Parameter Issue in Sling"),
>> //    @Property(name = Constants.SERVICE_VENDOR, value = "Madplanet.com") })
>> 
>> 2) Taken from the I18NFilter but this one is not called for Sling page
>> 
>> @Component(immediate = true, policy = ConfigurationPolicy.IGNORE, label = "Parameter
Issue Filter")
>> @Service(value = Filter.class)
>> @Properties({
>>    @Property(name = "pattern", value = "/.*"),
>>    @Property(name = Constants.SERVICE_RANKING, intValue = 0x8100),
>>    @Property(name = "service.description", value = "Filters Requests to demonstrate
the Parameter Issue in Sling"),
>>    @Property(name = "service.vendor", value = "Madplanet.com")
>> })
>> 
>> I traced it down to the Per Context Handler Registry but I am unable to register
>> my Filter with the one responsible for Sling pages.
>> 
>> Any help would be greatly appreciated.
>> 
>> This is 3rd client where I had to use a Filter ahead of the Sling Resource Resolution
>> do make changes to the request before the resource is resolved.
>> 
>> 
>> If that is not possible is there a way to make changes to the sling resource
>> in a filter like when I rewrite the URL to manage (AEM) dispatcher cache
>> for stuff like CSS or images?
>> 
>> Thanks - Andy Schaefer
>> 
>>> On Feb 16, 2017, at 4:05 AM, Robert Munteanu <rombert@apache.org> wrote:
>>> 
>>> Hi Andy,
>>> 
>>> On Tue, 2017-02-14 at 14:05 -0800, Andreas Schaefer Sr. wrote:
>>>> While working on AEM 6.2 SP1 with a Servlet Filter
>>>> I came across issues with the Parameter Support
>>>> as they interfere with the Servlet Filters or at least
>>>> with Servlet Filters that are handled before entering
>>>> the “Sling domain”.
>>>> 
>>>> 1) Because of the SlingHttpContext.handleSecurity()
>>>> the Parameter Support is created as one of the first
>>>> Servlet Filters.
>>>> 2) That Parameter Support reads the parameters from the
>>>> Servlet Input stream
>>>> 
>>>> 3) The Parameter Support Request Wrapper is ditched later
>>>> 
>>>> 4) Any later filter will not have access to the parameters
>>>> from the request
>>>> 
>>>> 5) Any Filter that wraps the Servlet Request to change
>>>> either the Query String or Parameter(s) will do that in vein
>>>> as the stored Parameter Support in 1) will provide the
>>>> parameters for anything in Sling
>>>> 
>>>> In my current project I am storing the Query String
>>>> which can be quite long in a Session and re-hydrate
>>>> that in a Filter. This worked in AEM 6.0 but now fails
>>>> due to the issues from above.
>>>> 
>>>> I don’t mind the Parameter Support but it should
>>>> check in the getInstance() method if the request was wrapped
>>>> and if then update the parameters from it.
>>> 
>>> This is not my domain of expertise, but creating a new ticket with a
>>> failing test would make this issue easier to tackle.
>>> 
>>> Thanks,
>>> 
>>> Robert
>>> 
>>>> 
>>>> I think this issue is related to this ticket:
>>>> 
>>>> https://issues.apache.org/jira/browse/SLING-3439?jql=text%20~%20%22Pa <https://issues.apache.org/jira/browse/SLING-3439?jql=text%20~%20%22Pa>
<https://issues.apache.org/jira/browse/SLING-3439?jql=text%20~%20%22Pa <https://issues.apache.org/jira/browse/SLING-3439?jql=text%20~%20%22Pa>>
>>>> rameterSupport%22 <https://issues.apache.org/jira/browse/SLING- <https://issues.apache.org/jira/browse/SLING->
<https://issues.apache.org/jira/browse/SLING- <https://issues.apache.org/jira/browse/SLING->>
>>>> 3439?jql=text%20~%20%22ParameterSupport%22>
>>>> 
>>>> Cheers - Andy Schaefer


Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message