相关疑难解决方法(0)

如何使用Spring Security很好地处理文件上载MaxUploadSizeExceededException

我正在使用Spring Web 4.0.5,Spring Security 3.2.4,Commons FileUpload 1.3.1,Tomcat 7,MaxUploadSizeExceededException当我超出上传大小限制时,我会变得很丑,这会导致"500内部服务器错误".我用一个很好的通用弹出窗口来处理它,但我宁愿让我的Controller通过返回原始形式并使用正确的解释消息来处理它.

我已经多次看到类似的问题了,一些解决方案在不使用Spring Security时可能会有效; 没有一个我试过的人为我工作.

问题可能在于使用Spring Security时,CommonsMultipartResolver不会将其添加为"multipartResolver"bean,而是添加为"filterMultipartResolver":

@Bean(name="filterMultipartResolver")
CommonsMultipartResolver filterMultipartResolver() {
    CommonsMultipartResolver filterMultipartResolver = new CommonsMultipartResolver();
    filterMultipartResolver.setMaxUploadSize(MAXSIZE);
    return filterMultipartResolver;
}
Run Code Online (Sandbox Code Playgroud)

如果我设置filterMultipartResolver.setResolveLazily(true);它没有任何区别.

如果我CommonsMultipartResolver使用我自己的子类并使用parseRequest()陷阱的方法覆盖该方法MaxUploadSizeExceededException并返回一个空MultipartParsingResult,我得到一个"403 Forbidden"错误:

public class ExtendedCommonsMultipartResolver extends CommonsMultipartResolver {
    protected MultipartParsingResult parseRequest(HttpServletRequest request) throws MultipartException {
        String encoding = determineEncoding(request);
        try {
            return super.parseRequest(request);
        } catch (MaxUploadSizeExceededException e) {
            return parseFileItems(Collections.<FileItem> emptyList(), encoding);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

最后,实现某种本地或全局ExceptionHandler是没有意义的,因为它从未被调用过.

如果我找不到更好的解决方案,我只需删除上传大小限制并在控制器中自行处理,但缺点是让用户等到上传完成后再看到有关文件大小的错误消息.我甚至可能会忽略所有这一切,因为在这种情况下它是一个图像,我可以将其调整到适当的值. …

spring file-upload spring-mvc spring-security

18
推荐指数
1
解决办法
3万
查看次数

使用Spring WebFlow 2.4.0进行文件上传,参数未绑定

我正在使用Spring Framework 4.1.5,Spring Security 4.0.0.RC2,Spring Webflow 2.4.0.RELEASE和Tomcat 8.0.15.

我按照webflow 文档中的示例进行操作,但是我无法在表单bean中获取该文件.

表格

    <form:form action="${flowExecutionUrl}" method="post" commandName="fileForm" enctype="multipart/form-data">
        <form:input type="file" value="" path="multipartFileUpload"/>
        <button type="submit" name="_eventId_forward"><spring:message code="signup.forward"/></button>
        <sec:csrfInput/>
    </form:form>
Run Code Online (Sandbox Code Playgroud)

表单bean

public class FileForm implements Serializable {
    private static final long serialVersionUID = 1L;

    private transient MultipartFile multipartFileUpload;

    public MultipartFile getMultipartFileUpload() {
        return multipartFileUpload;
    }

    public void setMultipartFileUpload(final MultipartFile multipartFileUpload) {
        this.multipartFileUpload = multipartFileUpload;
    }
}
Run Code Online (Sandbox Code Playgroud)

流动

<view-state id="companyLogo" view="signup/company-logo" model="fileForm">
    <var name="fileForm" class="it.openex.pmcommonw.form.FileForm"/>
    <transition on="back" to="chooseProfile" bind="false" validate="false"/>
    <transition on="forward" to="companyInfo">
        <evaluate …
Run Code Online (Sandbox Code Playgroud)

java spring-security spring-webflow

1
推荐指数
1
解决办法
2490
查看次数