Created
January 13, 2019 06:23
-
-
Save dfparker2002/f6d1f12335fa94b53c2ebac8b753fc76 to your computer and use it in GitHub Desktop.
AWM ACS Form POST redirect
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
src: https://github.com/Adobe-Consulting-Services/acs-aem-commons/blob/3c8159b5ba4e1765cef631f9f23a46f3e3c9bde8/bundle/src/main/java/com/adobe/acs/commons/forms/impl/FormsPostFilterImpl.java | |
* #%L | |
* ACS AEM Commons Bundle | |
* %% | |
* Copyright (C) 2013 Adobe | |
* %% | |
* Licensed 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. | |
* #L% | |
*/ | |
package com.adobe.acs.commons.forms.impl; | |
import java.io.IOException; | |
import javax.servlet.FilterChain; | |
import javax.servlet.FilterConfig; | |
import javax.servlet.ServletException; | |
import javax.servlet.ServletRequest; | |
import javax.servlet.ServletResponse; | |
import org.apache.commons.lang.StringUtils; | |
import org.apache.sling.api.SlingHttpServletRequest; | |
import org.apache.sling.api.SlingHttpServletResponse; | |
import org.apache.sling.api.request.RequestDispatcherOptions; | |
import org.apache.sling.api.request.RequestParameter; | |
import org.osgi.service.component.annotations.Component; | |
import org.osgi.service.component.annotations.Reference; | |
import org.slf4j.Logger; | |
import org.slf4j.LoggerFactory; | |
import com.adobe.acs.commons.forms.FormsRouter; | |
import com.adobe.acs.commons.forms.helpers.FormHelper; | |
/** | |
* ACS AEM Commons - Forms - Forms POST-Handler Filter | |
* Request Filter that handles some internal routing of ACS-AEM-Commons Form POST requests | |
* to Page URIs. | |
*/ | |
@Component(service=javax.servlet.Filter.class, | |
property = {"filter.order=0", "sling.filter.scope=request"}) | |
public class FormsPostFilterImpl implements javax.servlet.Filter { | |
private static final Logger log = LoggerFactory.getLogger(FormsPostFilterImpl.class); | |
@Reference | |
private FormsRouter formsRouter; | |
@Override | |
public void init(FilterConfig filterConfig) throws ServletException { | |
// no-op | |
} | |
@Override | |
public final void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, | |
FilterChain filterChain) throws IOException, ServletException { | |
if (!(servletRequest instanceof SlingHttpServletRequest) | |
|| !(servletResponse instanceof SlingHttpServletResponse)) { | |
filterChain.doFilter(servletRequest, servletResponse); | |
return; | |
} | |
final SlingHttpServletRequest slingRequest = (SlingHttpServletRequest) servletRequest; | |
final SlingHttpServletResponse slingResponse = (SlingHttpServletResponse) servletResponse; | |
/** | |
* Fail fast and early! | |
* | |
* Must be: | |
* - HTTP POST Request | |
* - Have Forms Sling Suffix | |
* - At this point, 99% of includes will be passed over | |
* - Must contain Form Resource Query Parameter | |
*/ | |
if (!StringUtils.equals("POST", slingRequest.getMethod()) | |
|| !formsRouter.hasValidSuffix(slingRequest)) { | |
filterChain.doFilter(servletRequest, servletResponse); | |
return; | |
} | |
final String formResource = this.getParameter(slingRequest, FormHelper.FORM_RESOURCE_INPUT); | |
if (formResource == null || slingRequest.getResourceResolver().resolve(formResource) == null) { | |
filterChain.doFilter(servletRequest, servletResponse); | |
return; | |
} | |
String formSelector = formsRouter.getFormSelector(slingRequest); | |
if (formSelector == null) { | |
formSelector = FormHelper.DEFAULT_FORM_SELECTOR; | |
} | |
final RequestDispatcherOptions options = new RequestDispatcherOptions(); | |
options.setReplaceSelectors(formSelector); | |
options.setReplaceSuffix(slingRequest.getRequestPathInfo().getSuffix()); | |
if (log.isDebugEnabled()) { | |
log.debug("Form Filter; Internal forward to path: {} ", formResource); | |
log.debug("Form Filter; Internal forward w/ replace selectors: {} ", options.getReplaceSelectors()); | |
log.debug("Form Filter; Internal forward w/ suffix: {} ", options.getReplaceSuffix()); | |
} | |
slingRequest.getRequestDispatcher(formResource, options).forward(slingRequest, slingResponse); | |
} | |
@Override | |
public void destroy() { | |
// no-op | |
} | |
private String getParameter(SlingHttpServletRequest slingRequest, String param) { | |
final RequestParameter requestParameter = | |
slingRequest.getRequestParameter(param); | |
if (requestParameter == null) { | |
return null; | |
} | |
return StringUtils.stripToNull(requestParameter.getString()); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment