/* * � Copyright IBM Corp. 2011 * * 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 com.ibm.domino.das.servlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequestWrapper; import com.ibm.commons.util.StringUtil; import com.ibm.domino.services.HttpServiceConstants; /** * This class is mainly for wrapping the http request for dispatching the request with * X-HTTP-Method-Override header * @author Mao Chuan * */ public class DasHttpRequestWrapper extends HttpServletRequestWrapper{ public DasHttpRequestWrapper(HttpServletRequest request) { super(request); } @Override public String getMethod() { String oldMethod = super.getMethod(); String overrideMethod = this.getHeader(HttpServiceConstants.HEADER_X_HTTP_METHOD_OVERRIDE); if(oldMethod.equalsIgnoreCase(HttpServiceConstants.HTTP_POST) && overrideMethod!=null){ return overrideMethod; } return oldMethod; } public String getRequestURI() { String uri = super.getRequestURI(); if ( StringUtil.isNotEmpty(uri) && !uri.startsWith("/") ) { // SPR# WJBJ9MZ9U9: The API iRule sometimes doesn't add the // leading slash. Fix that now. uri = "/" + uri; } return uri; } public String getContextPath() { String path = super.getContextPath(); if ( StringUtil.isNotEmpty(path) && !path.startsWith("/") ) { // SPR# WJBJ9MZ9U9: The API iRule sometimes doesn't add the // leading slash. Fix that now. path = "/" + path; } return encodeSpaces(path); } private static String encodeSpaces(String path) { if ( path == null || path.indexOf(' ') == -1 ) { return path; } StringBuffer encoded = new StringBuffer(); for ( int i = 0; i < path.length(); i++ ) { char ch = path.charAt(i); if ( ch == ' ' ) { encoded.append("%20"); } else { encoded.append(ch); } } return encoded.toString(); } }