/** * Copyright 2005-2016 hdiv.org * * 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. */ package org.hdiv.urlProcessor; import javax.servlet.http.HttpServletRequest; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.hdiv.context.RequestContextHolder; import org.hdiv.dataComposer.IDataComposer; import org.hdiv.util.Constants; import org.hdiv.util.HDIVUtil; import org.hdiv.util.Method; /** * UrlProcessor for form action urls. * * @author Gotzon Illarramendi */ public class FormUrlProcessor extends AbstractUrlProcessor { /** * Commons Logging instance. */ private static final Log log = LogFactory.getLog(FormUrlProcessor.class); @Deprecated public final String processUrl(final HttpServletRequest request, final String url) { return processUrl(HDIVUtil.getRequestContext(request), url, Method.POST); } @Deprecated public final String processUrl(final HttpServletRequest request, final String url, final Method method) { return processUrl(HDIVUtil.getRequestContext(request), url, method); } /** * Process form action url to add hdiv state if it is necessary. * * @param request {@link RequestContextHolder} object * @param url url to process * @return processed url */ public String processUrl(final RequestContextHolder request, final String url) { return processUrl(request, url, Method.POST); } /** * Process form action url to add hdiv state if it is necessary. * * @param request {@link RequestContextHolder} object * @param url url to process * @param method form submit method * @return processed url */ public String processUrl(final RequestContextHolder request, String url, Method method) { if (method == null) { method = Method.POST; } IDataComposer dataComposer = request.getDataComposer(); if (dataComposer == null) { // IDataComposer not initialized on request, request is out of filter if (log.isDebugEnabled()) { log.debug("IDataComposer not initialized on request. Request doesn't pass through ValidatorFilter, review it's mapping"); } return url; } String hdivParameter = dataComposer.getHdivParameterName(); UrlData urlData = createUrlData(url, method, hdivParameter, request); if (urlData.isHdivStateNecessary(config)) { // the url needs protection String stateId = dataComposer.beginRequest(method, urlData.getUrlWithoutContextPath()); // Publish the state in request to make it accessible on jsp request.setFormStateId(stateId); // Process url params String processedParams = dataComposer.composeParams(urlData.getUrlParams(), method, Constants.ENCODING_UTF_8); urlData.setComposedUrlParams(processedParams); // Action url with confidential values url = getProcessedUrl(dataComposer.getBuilder(), urlData); } else { // Reset state info request.setFormStateId(null); } return url; } }