IwcmRequest.java
package sk.iway.iwcm;
import java.util.Collections;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Locale;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
import org.apache.struts.util.ResponseUtils;
import sk.iway.iwcm.utils.MapUtils;
/**
* IwcmRequest.java
*
* Allows user to wrap an incoming {@link HttpServletRequest} and alter its parameters.
* The class acts transparently to a caller, acting as if supplied parameters
* were received via standard Tomcat request creation.
*
*@Title webjet7
*@Company Interway s.r.o. (www.interway.sk)
*@Copyright Interway s.r.o. (c) 2001-2010
*@author $Author: marosurbanec $
*@version $Revision: 1.3 $
*@created Date: 26.11.2010 13:14:49
*@modified $Date: 2004/08/16 06:26:11 $
*/
public class IwcmRequest extends HttpServletRequestWrapper
{
//private final HttpServletRequest original;
private Map<String, String[]> changedParameterValues = new HashMap<>();
private Locale forcedLocale = null;
public IwcmRequest(HttpServletRequest original)
{
//this.original = original;
super(original);
String lng = PageLng.getUserLng(original);
String[] isoLocale = Tools.getTokens(PageLng.getUserLngIso(lng), "-");
if (isoLocale.length == 2) {
setLocale(new java.util.Locale(isoLocale[0], isoLocale[1]));
}
}
@Override
public String getParameter(String parameter)
{
if (changedParameterValues.containsKey(parameter))
return changedParameterValues.get(parameter)[0];
//[#32245 - Penetracni testy novy web] - osetrenie formlarovych parametrov aby nemohli obsahovat HTML kod
//testovaci payload zadany do inputu: <input type="text" oncopy="prompt(1)" value="Try to copy this text">
return ResponseUtils.filter(super.getParameter(parameter));
}
@Override
public Map<String, String[]> getParameterMap()
{
return MapUtils.merge(changedParameterValues, super.getParameterMap());
}
@Override
public Enumeration<String> getParameterNames()
{
return Collections.enumeration(getParameterMap().keySet());
}
@Override
public String[] getParameterValues(String parameter)
{
if (changedParameterValues.containsKey(parameter))
return changedParameterValues.get(parameter);
//[#32245 - Penetracni testy novy web] - osetrenie formlarovych parametrov aby nemohli obsahovat HTML kod
String[] values = super.getParameterValues(parameter);
if (values==null || values.length<1) return values;
//musime to prekopirovat do noveho pola, inak sa nam pri kazdom volani getParameterValues zduplikuje ResponseUtils.filter
String[] valuesFiltered = new String[values.length];
if (values!=null && values.length>0)
{
for (int i=0; i<values.length; i++)
{
valuesFiltered[i] = ResponseUtils.filter(values[i]);
}
}
return valuesFiltered;
}
public String getOriginalParameter(String key)
{
return super.getParameter(key);
}
public void setParameter(String key, String value)
{
String[] values = getParameterValues(key);
if (values == null || values.length!=1)
{
values = new String[1];
}
//jeeff: povodne som uvazoval, ze sa len zvacsi to pole, to by sa ale potom nedala prepisat hodnota, pre pole treba pouzit setParameterValues
values[0] = value;
changedParameterValues.put(key, values);
}
public void setParameterValues(String key, String[] values)
{
changedParameterValues.put(key, values);
}
public String param(String key)
{
return getParameter(key);
}
public boolean hasParameter(String key)
{
return param(key) != null;
}
public Object attr(String key)
{
return getAttribute(key);
}
public boolean hasAttribute(String key)
{
return attr(key) != null;
}
public void setLocale(Locale locale) {
this.forcedLocale = locale;
}
@Override
public Locale getLocale() {
if (forcedLocale != null) {
return forcedLocale;
}
return super.getLocale();
}
}