【发布时间】:2019-08-17 07:49:59
【问题描述】:
我的请求中有两个常用参数data1和data2,我需要将它们解密为10个参数,并在我的控制器中使用它们。
我尝试将 HttpServletRequest 参数替换为过滤器中的 My Custom HttpServletRequestWrapper 实例。但是我得到了一个 DefaultMultipartHttpServletRequest 实例而不是我的 HttpServletRequestWrapper 实例。所以我无法在我的控制器中获取解密的参数。 我还发现 HandlerInterceptorAdapter 中不能更改请求参数。
public class SecurityFilter extends OncePerRequestFilter {
private Logger logger = LoggerFactory.getLogger(this.getClass());
@Override
protected void doFilterInternal(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, FilterChain filterChain) throws ServletException, IOException {
//todo: convert data1,data2 to param1, ... param10
logger.info("doFilterInternal 1 " + httpServletRequest);
filterChain.doFilter(new CultureRequestWrapper(httpServletRequest), httpServletResponse);
logger.info("doFilterInternal 2 " + httpServletRequest);
}
}
public class CultureRequestWrapper extends HttpServletRequestWrapper {
public CultureRequestWrapper(HttpServletRequest request) {
super(request);
}
@Override
public String[] getParameterValues(String name) {
//todo:convert
return super.getParameterValues(name);
}
}
@RequestMapping(value = {"/req1"})
@ResponseBody
public JsonResult testreq(HttpServletRequest request) {
logger.info("request:" + request);//get DefaultMultipartHttpServletRequest
logger.info("request param size:" + request.getParameterMap().size());//get 2 (data1,data2)
String param1 = request.getParameter("param1");
...
String param10 = request.getParameter("param10");
}
【问题讨论】:
-
你的控制器方法的签名现在怎么样了?
-
@MaciejKowalski @RequestMapping(value = {"/req1"})@ResponseBody public JsonResult testreq(HttpServletRequest request) { String param1 = request.getParameter("param1"); ... String param10 = request.getParameter("param10"); }
标签: java spring spring-mvc