package com.c2c.controller;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
public class CaseInsensitiveParamFilter implements Filter {
private static class CaseInsensitiveParamWrapper extends
HttpServletRequestWrapper {
public CaseInsensitiveParamWrapper(HttpServletRequest request) {
super(request);
}
@Override
public String getParameter(String name) {
Enumeration names = super.getParameterNames();
while (names.hasMoreElements()) {
String realName = (String) names.nextElement();
if (realName.equalsIgnoreCase(name)) {
return super.getParameter(realName);
}
}
return null;
}
@Override
public Enumeration getParameterNames() {
Enumeration names = super.getParameterNames();
List newNames = new ArrayList();
while (names.hasMoreElements()) {
String realName = (String) names.nextElement();
newNames.add(realName.toUpperCase());
}
return Collections.enumeration(newNames);
}
@Override
public String[] getParameterValues(String name) {
Enumeration names = super.getParameterNames();
while (names.hasMoreElements()) {
String realName = (String) names.nextElement();
if (realName.equalsIgnoreCase(name)) {
return super.getParameterValues(realName);
}
}
return null;
}
@Override
public Map getParameterMap() {
Enumeration names = super.getParameterNames();
Map newNames = new HashMap();
while (names.hasMoreElements()) {
String realName = (String) names.nextElement();
newNames.put(realName.toUpperCase(), super.getParameterValues(realName));
}
return newNames;
}
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
// override the request passed to the FilterChain
HttpServletRequest overridenRequest = new CaseInsensitiveParamWrapper(
(HttpServletRequest) request);
chain.doFilter(overridenRequest, response);
}
@Override
public void destroy() {
// TODO Auto-generated method stub
}
@Override
public void init(FilterConfig arg0) throws ServletException {
// TODO Auto-generated method stub
}
}