This is an automated email from the ASF dual-hosted git repository. kwin pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-servlets-annotations.git
commit de6ddf01a0d9d6dd4735a74b65dfddde87e31f5e Author: Konrad Windszus <[email protected]> AuthorDate: Sun May 13 18:57:06 2018 +0200 SLING-7624 add annotation for Sling Servlet Filters --- pom.xml | 13 +++- .../servlets/annotations/SlingServletByPath.java | 3 +- .../annotations/SlingServletByResourceType.java | 3 +- .../servlets/annotations/SlingServletFilter.java | 60 ++++++++++++++++ .../annotations/SlingServletFilterScope.java | 82 ++++++++++++++++++++++ 5 files changed, 158 insertions(+), 3 deletions(-) diff --git a/pom.xml b/pom.xml index 8903fa0..58e2e98 100644 --- a/pom.xml +++ b/pom.xml @@ -46,12 +46,23 @@ <artifactId>org.osgi.service.component.annotations</artifactId> <version>1.4.0</version><!-- for annotation @ComponentPropertyType --> </dependency> - <dependency> + <dependency> <groupId>org.apache.sling</groupId> <artifactId>org.apache.sling.api</artifactId> <!-- https://issues.apache.org/jira/browse/SLING-6249, only for link in javadoc --> <version>2.16.0</version> </dependency> + <dependency> + <groupId>org.apache.sling</groupId> + <artifactId>org.apache.sling.api</artifactId> + <!-- https://issues.apache.org/jira/browse/SLING-6249, only for link in javadoc --> + <version>2.16.0</version> + </dependency> + <dependency> + <groupId>javax.servlet</groupId> + <artifactId>javax.servlet-api</artifactId> + </dependency> + </dependencies> </project> diff --git a/src/main/java/org/apache/sling/servlets/annotations/SlingServletByPath.java b/src/main/java/org/apache/sling/servlets/annotations/SlingServletByPath.java index d244457..9bbdc5c 100644 --- a/src/main/java/org/apache/sling/servlets/annotations/SlingServletByPath.java +++ b/src/main/java/org/apache/sling/servlets/annotations/SlingServletByPath.java @@ -26,8 +26,9 @@ import org.osgi.service.component.annotations.ComponentPropertyType; * for reasons outlined at <a href="https://sling.apache.org/documentation/the-sling-engine/servlets.html#caveats-when-binding-servlets-by-path"> * Caveats when binding servlets by path</a> * - * @see <a href="https://github.com/apache/felix/blob/trunk/tools/org.apache.felix.scr.annotations/src/main/java/org/apache/felix/scr/annotations/sling/SlingServlet.java">Felix SCR annotations</a> + * @see <a href="https://sling.apache.org/documentation/the-sling-engine/servlets.html">Sling Servlets</a> * @see ServletResolverConstants + * @see <a href="https://github.com/apache/felix/blob/trunk/tools/org.apache.felix.scr.annotations/src/main/java/org/apache/felix/scr/annotations/sling/SlingServlet.java">Felix SCR annotation</a> */ @ComponentPropertyType public @interface SlingServletByPath { diff --git a/src/main/java/org/apache/sling/servlets/annotations/SlingServletByResourceType.java b/src/main/java/org/apache/sling/servlets/annotations/SlingServletByResourceType.java index c9dc6d6..096df75 100644 --- a/src/main/java/org/apache/sling/servlets/annotations/SlingServletByResourceType.java +++ b/src/main/java/org/apache/sling/servlets/annotations/SlingServletByResourceType.java @@ -23,8 +23,9 @@ import org.osgi.service.component.annotations.ComponentPropertyType; * Takes care of writing the relevant component properties as being used by the Sling Servlet Resolver ({@link ServletResolverConstants}) * to register the annotated servlet component as Sling servlet for a specific resource type. * - * @see <a href="https://github.com/apache/felix/blob/trunk/tools/org.apache.felix.scr.annotations/src/main/java/org/apache/felix/scr/annotations/sling/SlingServlet.java">Felix SCR annotations</a> + * @see <a href="https://sling.apache.org/documentation/the-sling-engine/servlets.html">Sling Servlets</a> * @see ServletResolverConstants + * @see <a href="https://github.com/apache/felix/blob/trunk/tools/org.apache.felix.scr.annotations/src/main/java/org/apache/felix/scr/annotations/sling/SlingServlet.java">Felix SCR annotation</a> */ @ComponentPropertyType public @interface SlingServletByResourceType { diff --git a/src/main/java/org/apache/sling/servlets/annotations/SlingServletFilter.java b/src/main/java/org/apache/sling/servlets/annotations/SlingServletFilter.java new file mode 100644 index 0000000..de6fbb6 --- /dev/null +++ b/src/main/java/org/apache/sling/servlets/annotations/SlingServletFilter.java @@ -0,0 +1,60 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.sling.servlets.annotations; + +import org.apache.sling.api.servlets.ServletResolverConstants; +import org.osgi.service.component.annotations.ComponentPropertyType; + +/** + * Component Property Type (as defined by OSGi DS 1.4) for Sling Servlet Filters. + * Takes care of writing the relevant component properties as being used by the Sling Servlet Resolver + * ({@link ServletResolverConstants}) to register the annotated servlet filter component as + * Sling servlet filter. + * <br><br> + * The order of the filter is determined by the property {@code service.ranking}. Its value is used to sort the filters. + * Filters with a higher order are executed before a filter with a lower order. If two filters have the same order, + * the one with the lower service id is executed first. + * <br> + * <br> + * Please note that the ordering is actually depending on the used Apache Sling Engine bundle version. Version older than 2.3.4 of that + * bundle are sorting the filters in the wrong reverse order. Make sure to run a newer version of the Sling engine to get the correct + * ordering (see also <a href="https://issues.apache.org/jira/browse/SLING-2920">SLING-2920</a>). + * + * @see <a href= + * "https://github.com/apache/felix/blob/trunk/tools/org.apache.felix.scr.annotations/src/main/java/org/apache/felix/scr/annotations/sling/SlingFilter.java">Felix + * SCR annotation</a> + * @see <a href="https://sling.apache.org/documentation/the-sling-engine/filters.html">Sling Servlet Filter</a> + */ +@ComponentPropertyType +public @interface SlingServletFilter { + + /** + * Prefix for every property being generated from the annotations elements (as defined in OSGi 7 Compendium, 112.8.2.1) + */ + static final String PREFIX_ = "sling.filter."; + + /** + * Restrict the filter to paths that match the supplied regular expression. Requires Sling Engine 2.4.0. + */ + String pattern() default ""; + + /** + * The scopes of a filter. If the filter has request scope, it is run once for a request. If the filter has component scope, it is run + * once for every included component (rendering). + */ + SlingServletFilterScope[] scope() default SlingServletFilterScope.REQUEST; +} diff --git a/src/main/java/org/apache/sling/servlets/annotations/SlingServletFilterScope.java b/src/main/java/org/apache/sling/servlets/annotations/SlingServletFilterScope.java new file mode 100644 index 0000000..ac92f02 --- /dev/null +++ b/src/main/java/org/apache/sling/servlets/annotations/SlingServletFilterScope.java @@ -0,0 +1,82 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.sling.servlets.annotations; + +import javax.servlet.RequestDispatcher; +import javax.servlet.http.HttpServletResponse; +/** + * The possible scopes for the {@link SlingServletFilter#scope()} annotation. + */ +public enum SlingServletFilterScope { + + /** + * Filters are called once per request hitting Sling from the outside. + * These filters are called after the resource addressed by the request URL and the Servlet or script to process the request has been resolved + * before the COMPONENT filters (if any) and the Servlet or script are called. + * <p>Servlet API Correspondence: {@code REQUEST}</p> + */ + REQUEST("REQUEST"), + + /** + * Filters are called upon calling the {@link RequestDispatcher#include(javax.servlet.ServletRequest, javax.servlet.ServletResponse)} + * method after the included resource and the Servlet or script to process the include have been resolved before the Servlet or script is called. + * <p>Servlet API Correspondence: {@code REQUEST},{@code INCLUDE},{@code FORWARD}</p> + */ + COMPONENT("COMPONENT"), + + /** + * Filters are called upon {@link HttpServletResponse#sendError(int)} or {@link HttpServletResponse#sendError(int, String)} + * or any uncaught Throwable before resolving the error handler Servlet or script. + * <p>Servlet API Correspondence: {@code ERROR}</ + */ + ERROR("ERROR"), + + /** + * Filters are called upon calling the RequestDispatcher.include method after the included resource and the Servlet + * or script to process the include have been resolved before the Servlet or script is called. + * <p>Servlet API Correspondence: {@code INCLUDE}</p> + */ + INCLUDE("INCLUDE"), + + /** + * Filters are called upon calling the RequestDispatcher.forward method after the included resource and the Servlet + * or script to process the include have been resolved before the Servlet or script is called. + * <p>Servlet API Correspondence: {@code FORWARD}</p> + */ + FORWARD("FORWARD"); + + private final String scope; + + private SlingServletFilterScope(final String scope) { + this.scope = scope; + } + + /** + * @return String representation of the scope + */ + public String getScope() { + return this.scope; + } + + @Override + public String toString() { + return this.getScope(); + } + +} \ No newline at end of file -- To stop receiving notification emails like this one, please contact [email protected].
