[英]Case-insensitive query string request parameters
我的目標是以下所有URI都應該有效
https://開頭休息/ XYZ? sort = name
https://開頭休息/ XYZ? 排序 =名稱
https://開頭休息/ XYZ? filter = name = value
https://開頭休息/ XYZ? Filter = name = value
為此,我創建了自定義過濾器來覆蓋傳遞給FilterChain的HttpServletRequest。 以下是此方法的鏈接:
http://forum.springsource.org/archive/index.php/t-87433.html
我的代碼:
import java.io.IOException;
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 HttpCustomParamFilter implements Filter
{
private static class HttpServletRequestCustomeWrapper extends HttpServletRequestWrapper
{
private String[] parameterValues;
@Override
public String[] getParameterValues(String name)
{
Map<String, String[]> localParameterMap = super.getParameterMap();
// Handle case insensitivity of http request paramters like start, count, query, sort, filter etc.
if (localParameterMap != null && !localParameterMap.isEmpty())
{
parameterValues = new String[localParameterMap.size()];
for (String key : localParameterMap.keySet())
{
if (name.equalsIgnoreCase(key))
parameterValues = localParameterMap.get(key);
else
parameterValues = null;
}
}
return parameterValues;
}
public HttpServletRequestCustomWrapper(final ServletRequest request)
{
super((HttpServletRequest) request);
}
}
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
// override the request passed to the FilterChain
chain.doFilter(new HttpServletRequestCustomWrapper(request), response);
}
@Override
public void init(FilterConfig filterConfig)
throws ServletException
{
// TODO Auto-generated method stub
}
@Override
public void destroy()
{
// TODO Auto-generated method stub
}
}
在這段代碼中,我重寫了getParameterValues(String name)方法並實現了請求參數的大小寫不敏感,但不確定我是否需要覆蓋任何其他方法。
我的疑惑:
我是否需要覆蓋其他方法,如getParameter()和getParameterNames()?
內部實施受此影響的是什么?
哪個類我可以看到getParameter(),getParameterNames()和getParameterValues()的代碼實現?
首先,讓我說出我的平安:我不認為修改HttpServletRequestWrapper是要走的路。 我甚至不確定你將如何使用它,因為我的理解是它是特定於App Server的。 作為旁注, 本文詳細介紹了如何使用HttpServletRequest獲取不區分大小寫的查詢參數,而無需自行編譯。
但是,本着回答你的問題的精神:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.