Java 多部分解析程序未处理多部分请求

Java 多部分解析程序未处理多部分请求,java,spring,spring-mvc,csrf,multipartform-data,Java,Spring,Spring Mvc,Csrf,Multipartform Data,我最近对我的spring应用程序做了一些更改,添加了csrf支持。为此,我还必须改变以前处理多部分请求的方式 为了确保多部分请求正确通过,我将org.springframework.web.multipart.support.MultipartFilter放在org.springframework.web.filter.DelegatingFilterProxy之前的web.xml 虽然它在大多数请求中工作正常,但有些请求在控制器级别没有收到任何请求参数。我调试了一下,发现在这段代码中 Http

我最近对我的spring应用程序做了一些更改,添加了csrf支持。为此,我还必须改变以前处理多部分请求的方式

为了确保多部分请求正确通过,我将
org.springframework.web.multipart.support.MultipartFilter
放在
org.springframework.web.filter.DelegatingFilterProxy
之前的
web.xml

虽然它在大多数请求中工作正常,但有些请求在控制器级别没有收到任何请求参数。我调试了一下,发现在这段代码中

HttpServletRequest processedRequest = request;
    if (multipartResolver.isMultipart(processedRequest)) {
        if (logger.isDebugEnabled()) {
            logger.debug("Resolving multipart request [" + processedRequest.getRequestURI() +
                    "] with MultipartFilter");
        }
        processedRequest = multipartResolver.resolveMultipart(processedRequest);
    }
    else {
        // A regular request...
        if (logger.isDebugEnabled()) {
            logger.debug("Request [" + processedRequest.getRequestURI() + "] is not a multipart request");
        }
    }
MultipartFilter中,
没有将我的请求作为multipart处理。当进行
multipartResolver.isMultipart(processedRequest)
检查时,请求转到else部分

JSP
中的表单具有
enctype=“multipart/form data”
参数

<form:form modelAttribute="configVO" name="ConfigForm" method="post" enctype="multipart/form-data" action="${contextPath}/project/urlConfig">
        <input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}"/>
        <div class="urldivSales">
            <div class="main-subdiv-urls-msa">
                <div class="leftlable">
                    <span>Website Name</span>
                </div>
            </div>
            <div class="main-subdiv-urls-msa">
                <div class="leftlable">
                    <span>Request URL</span>
                </div>
            </div>
            <div class="main-subdiv-urls-msa">
                <div class="leftlable">
                    <span>Response URL</span>
                </div>
            </div>
            <div class="main-subdiv-urls-msa">
                <div class="leftlable">
                    <span>Image Name</span>
                </div>
            </div>
            <div class="main-subdiv-urls-msa">
                <div class="leftlable">
                    <span>Image File</span>
                </div>
            </div>

            <div class="main-subdiv-urls-msa">
                <div class="rightbox">
                    <div id='url'></div>
                </div>
            </div>
            <div class="main-subdiv-urls-msa">
                <div class="rightbox">
                    <div id='req'></div>
                </div>
            </div>
            <div class="main-subdiv-urls-msa">
                <div class="rightbox">
                    <div id='res'></div>
                </div>
            </div>
            <div class="main-subdiv-urls-msa">
                <div class="rightbox">
                    <div id='image'></div>
                </div>
            </div>
            <div class="main-subdiv-urls-msa">
                <div class="rightbox">
                    <div id='imageFile'></div>
                </div>
            </div>

            <div class="form3buttons">
                <input type="button" name="button" id="save" value="Save" onclick="validateForm();" /> 
                <input type="button" name="cancel" id="cancel" value="Cancel" />
            </div>
        </div>
    </form:form>

网站名称
请求URL
响应URL
图像名称
图像文件
javascript验证方法

function validateForm() {
$('#save').attr('disabled', 'disabled');
var isValid = false;
var noOfRows = '${num}';
var webSiteArray = new Array(); 
var imageNameArray = new Array();   
for(var i=0; i<noOfRows; i++) {
    var web = "web"+i;
    var req = "req"+i;
    var res = "res"+i;
    var image = "image"+i;

    var webSiteUrl =  document.getElementById(web).value;
    var imageNameValue =  document.getElementById(image).value;
    webSiteArray[i]= webSiteUrl;
    imageNameArray[i]= imageNameValue;
    var newReqUrl = document.getElementById(req).value;
    var newResUrl = document.getElementById(res).value;
    isValid = checkParm(webSiteUrl,newReqUrl,newResUrl);
    if (!isValid) {
       $('#save').removeAttr("disabled");
       break;   
    }
}

if (isValid) {
    if (checkValueisEqual(webSiteArray, imageNameArray)) {
      var contextPath = '${contextPath}'+'/project/urlConfig';
      document.forms[0].action= contextPath;
      document.forms[0].submit();
    }
}
函数validateForm(){
$('#save').attr('disabled','disabled');
var isValid=false;
var noOfRows='${num}';
var webSiteArray=新数组();
var imageNameArray=新数组();

对于(var i=0;i感谢M.Deinum询问请求是如何提交的

我通过改变表单提交的方式成功地完成了

找零 用于验证的javascript函数

function validateForm() {
$('#save').attr('disabled', 'disabled');
var isValid = false;
var noOfRows = '${num}';
var webSiteArray = new Array();
var imageNameArray = new Array();
for(var i=0; i<noOfRows; i++) {
    var web = "web"+i;
    var req = "req"+i;
    var res = "res"+i;
    var image = "image"+i;

    var webSiteUrl =  document.getElementById(web).value;
    var imageNameValue =  document.getElementById(image).value;
    webSiteArray[i]= webSiteUrl;
    imageNameArray[i]= imageNameValue;
    var newReqUrl = document.getElementById(req).value;
    var newResUrl = document.getElementById(res).value;
    isValid = checkParm(webSiteUrl,newReqUrl,newResUrl);
    if (!isValid) {
       $('#save').removeAttr("disabled");
       return false;
    }
}

if (isValid) {
    if (checkValueisEqual(webSiteArray, imageNameArray)) {
      return true;
    }
    return false;
} }
函数validateForm(){
$('#save').attr('disabled','disabled');
var isValid=false;
var noOfRows='${num}';
var webSiteArray=新数组();
var imageNameArray=新数组();

对于(var i=0;i您是真的提交了表单还是也通过javascript提交了表单,高兴地忽略了表单中的所有设置?同样,将筛选器放在其他筛选器之前也不能保证任何事情,导入部分是
筛选器映射
元素,而不是
筛选器
元素Ping
很重要!@M.Deinum表单正在通过javascript提交。我已经编辑了帖子并添加了使用中的方法add your web.xml,至少还有过滤器部分。添加了过滤器映射我不明白的一点是,为什么要再次设置动作url?它已经在表单上了。如何添加输入元素?
function validateForm() {
$('#save').attr('disabled', 'disabled');
var isValid = false;
var noOfRows = '${num}';
var webSiteArray = new Array();
var imageNameArray = new Array();
for(var i=0; i<noOfRows; i++) {
    var web = "web"+i;
    var req = "req"+i;
    var res = "res"+i;
    var image = "image"+i;

    var webSiteUrl =  document.getElementById(web).value;
    var imageNameValue =  document.getElementById(image).value;
    webSiteArray[i]= webSiteUrl;
    imageNameArray[i]= imageNameValue;
    var newReqUrl = document.getElementById(req).value;
    var newResUrl = document.getElementById(res).value;
    isValid = checkParm(webSiteUrl,newReqUrl,newResUrl);
    if (!isValid) {
       $('#save').removeAttr("disabled");
       return false;
    }
}

if (isValid) {
    if (checkValueisEqual(webSiteArray, imageNameArray)) {
      return true;
    }
    return false;
} }
<form:form modelAttribute="configVO" name="ConfigForm" method="post" enctype="multipart/form-data" action="${contextPath}/project/urlConfig" onsubmit = "return validateForm();">
<input type="submit" name="button" id="save" value="Save" />