シンプルな JSON サニタイズ Filter/RequestWrapper があります (コンテンツ タイプは ですapplication/json
)。ただし、重要なオーバーライド ( getReader(), getInputStream(), getParameter*()
) がラッパー内で呼び出されることはありません。
これは私のフィルターです:
public class MyFilter implements Filter
{
public MyFilter()
{
//Empty
}
@Override
public void init(final FilterConfig filterConfig) throws ServletException
{
//Empty
}
@Override
public void doFilter(final ServletRequest request, final ServletResponse response, final FilterChain chain)
throws IOException, ServletException
{
HttpServletRequest httpRequest = (HttpServletRequest)request;
HttpServletResponse httpResponse = (HttpServletResponse)response;
MyRequestWrapper wrappedRequest = new MyRequestWrapper(httpRequest);
chain.doFilter(wrappedRequest, httpResponse);
}
@Override
public void destroy()
{
// TODO Auto-generated method stub
}
}
ここに私のラッパーがあります:
public class MyRequestWrapper extends HttpServletRequestWrapper
{
private HttpServletRequest servletRequest;
public MyRequestWrapper(HttpServletRequest servletRequest)
{
super(servletRequest);
this.servletRequest = servletRequest;
}
@Override
public String[] getParameterValues(String parameter)
{
String[] values = super.getParameterValues(parameter);
if (values == null)
{
return null;
}
int count = values.length;
String[] sanitizedValues = new String[count];
for (int i = 0; i < count; i++)
{
sanitizedValues[i] = sanitizeUserInput(values[i]);
}
return sanitizedValues;
}
@Override
public String getParameter(String parameter)
{
String value = super.getParameter(parameter);
return sanitizeUserInput(value);
}
@Override
public ServletInputStream getInputStream() throws IOException
{
return this.servletRequest.getInputStream();
}
@Override
public BufferedReader getReader() throws IOException
{
return new BufferedReader(new InputStreamReader(this.getInputStream()));
}
private String sanitizeUserInput(String input)
{
// ...
return input;
}
}
getParameterMap()、getHeaders() などのオーバーライドも試みました。オーバーライドの一部は呼び出されますが、json がサーブレットにポストされたときは呼び出されません。フィルターチェーンの別のフィルターがポスト本体を飲み込む可能性はありますか? これをデバッグする方法はありますか?
ありがとう