java – 使用HTTPServletRequestWrapper包装请求参数
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – 使用HTTPServletRequestWrapper包装请求参数,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2310字,纯文字阅读大概需要4分钟。
内容图文
我有一个验证/授权REST调用的过滤器.这个过滤器需要访问请求参数,所以我为此编写了一个自定义的HTTPServletRequestWrapper.
import java.util.Collections;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.ServletRequest;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
public class WrapperRequest extends HttpServletRequestWrapper {
private Map<String, String[]> requestParams = null;
public WrapperRequest(final ServletRequest request) {
super((HttpServletRequest) request);
}
@Override
public String getParameter(final String name) {
if (getParameterMap().get(name) != null) {
return getParameterMap().get(name)[0];
} else {
getParameterMap().get(name)[0] = super.getParameter(name);
requestParams.put(name, getParameterMap().get(name));
return requestParams.get(name)[0];
}
}
@Override
public Map<String, String[]> getParameterMap() {
if (requestParams == null) {
requestParams = new HashMap<String, String[]>();
requestParams.putAll(super.getParameterMap());
}
return Collections.unmodifiableMap(requestParams);
}
@Override
public Enumeration<String> getParameterNames() {
return Collections.enumeration(getParameterMap().keySet());
}
@Override
public String[] getParameterValues(final String name) {
return getParameterMap().get(name);
}
}
在我的过滤器doFilter方法中:
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
final WrapperRequest wrappedRequest = new WrapperRequest(request);
Map<String, String[]> paramMap = wrappedRequest.getParameterMap();
chain.doFilter(wrappedRequest, response);
但是我收到了以下警告
WARNING: A servlet request, to the URI
, contains form
parameters in the request body but the request body has been consumed
by the servlet or a servlet filter accessing the request parameters.
Only resource methods using @FormParam will work as expected. Resource
methods consuming the request body by other means will not work as
expected.
我正在Tomcat中部署它.救命!
解决方法:
我认为你使用Jersey作为你的REST框架?
我认为这基本上是说由于Servlet现在构建了Request对象,所以Jersey现在无法分辨表单参数和查询字符串参数之间的区别.
有关详细信息,请参阅此内容:https://issues.apache.org/jira/browse/STANBOL-437
这引出了一个问题 – 这实际上是导致您出现问题还是只是担心警告信息?
内容总结
以上是互联网集市为您收集整理的java – 使用HTTPServletRequestWrapper包装请求参数全部内容,希望文章能够帮你解决java – 使用HTTPServletRequestWrapper包装请求参数所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。