当前位置:  开发笔记 > 程序员 > 正文

在Spring MVC上使用Servlet 3.0的MultipartConfig

如何解决《在SpringMVC上使用Servlet3.0的MultipartConfig》经验,为你挑选了1个好方法。

如何将多部分配置添加到spring mvc应用程序中,该应用程序使用带有使用RequestMapping注释的方法的控制器?

背景:

我想启用csrf保护,所以在我的spring配置中添加了security:csrf标签.我有一个控制器类,其中一个方法使用RequestMapping进行注释,用于上传文件.我还遵循了多部分的警告说明,我在安全过滤器上方添加了多部分过滤器.当我在添加csrf标签后尝试上传文件时,我遇到了一个缺少getParts()方法的异常.一个快速谷歌强调这是由于使用基于servlet 2.5规范的jetty版本.我将jetty-maven-plugin升级到8.1.14.v20131031并再次尝试上传.导致:

org.springframework.web.multipart.MultipartException: Could not parse multipart servlet request; nested exception is java.lang.IllegalStateException: No multipart config for servlet
        at org.springframework.web.multipart.support.StandardMultipartHttpServletRequest.(StandardMultipartHttpServletRequest.java:68)
        at org.springframework.web.multipart.support.StandardServletMultipartResolver.resolveMultipart(StandardServletMultipartResolver.java:58)
        at org.springframework.web.multipart.support.MultipartFilter.doFilterInternal(MultipartFilter.java:110)

我在哪里为xml设置放置多部分配置?所有文档都说要在web.xml中的特定servlet的servlet标记中添加multipart-config.但是我的应用程序只有一个servlet.所以我添加了它,但我仍然遇到同样的问题.


    SpringDispatcher
    org.springframework.web.servlet.DispatcherServlet
    
    
        /tmp
        20848820
        418018841
        1048576
    
    
        contextConfigLocation
        /WEB-INF/spring/servlet-context.xml
        
    
    10

我还更新了web.xml顶部的模式位置,指向servlet规范的3.0版本,源自http://www.mkyong.com/web-development/the-web-xml-deployment-descriptor-examples /.

有帮助吗?

编辑:为Rob添加了以下riles:

web.xml中




    
        contextConfigLocation
        classpath:/spring/webapp.xml
    

    
        spring.profiles.default
        OracleDB,common
    

    
        org.springframework.web.context.ContextLoaderListener
        
    

    
        org.springframework.security.web.session.HttpSessionEventPublisher
        
    

    
        SpringDispatcher
        org.springframework.web.servlet.DispatcherServlet
        
        
            /tmp
            20848820
            418018841
            1048576
        
        
            contextConfigLocation
            /WEB-INF/spring/servlet-context.xml
            
        
        10
    

    
        SpringDispatcher
        /
    

    
        MultipartFilter
        org.springframework.web.multipart.support.MultipartFilter
    

    
        MultipartFilter
        /*
    

    
        springSecurityFilterChain
        org.springframework.web.filter.DelegatingFilterProxy
        
    

    
        springSecurityFilterChain
        /*
    

    
        sitemesh
        com.opensymphony.module.sitemesh.filter.PageFilter
    

    
        sitemesh
        /*
    

    
        characterEncodingFilter
        org.springframework.web.filter.CharacterEncodingFilter
        
            encoding
            UTF-8
        
        
            forceEncoding
            true
        
    

    
        characterEncodingFilter
        /*
    

    
        XSS
        com.mycompany.CrossScriptingFilter
    

    
        XSS
        /*
    

    
        10
    

    
        Core Datasource
        jdbc/coreDataSource
        javax.sql.DataSource
        Container
    

    
        Location Datasource
        jdbc/locationDataSource
        javax.sql.DataSource
        Container
    

    
        
        401
        /WEB-INF/views/errorPage.jsp
    
    
        
        403
        /WEB-INF/views/errorPage.jsp
    
    
        
        404
        /WEB-INF/views/errorPageNotFound.jsp
    
    
        
        500
        /WEB-INF/views/errorPage.jsp
    
    
        
        503
        /WEB-INF/views/errorPage.jsp
    


servlet的context.xml中




    

    
    

    

    
        
    

    

    
        
        
        
        
    

    
        
    

    
        
            
                classpath:language
                classpath:language_additions
                classpath:formats
            
        
        
    

    


Rob Winch.. 10

我相信您遇到的问题与SPR-11373有关.具体来说,servlet规范并不清楚在Filter中执行多部分分辨率时应该发生什么.

您是否尝试过使用commons-fileupload?这可能是您的最佳选择.首先添加以下依赖项:


  commons-fileupload
  commons-fileupload
  1.2.2

接下来确保在根应用程序上下文中具有以下bean定义.




你可以找到一个完整的工作示例,包括commons-upload(更喜欢这个解决方案)和使用tomcat 在SEC-2471上使用allowCasualMultipartParsing



1> Rob Winch..:

我相信您遇到的问题与SPR-11373有关.具体来说,servlet规范并不清楚在Filter中执行多部分分辨率时应该发生什么.

您是否尝试过使用commons-fileupload?这可能是您的最佳选择.首先添加以下依赖项:


  commons-fileupload
  commons-fileupload
  1.2.2

接下来确保在根应用程序上下文中具有以下bean定义.




你可以找到一个完整的工作示例,包括commons-upload(更喜欢这个解决方案)和使用tomcat 在SEC-2471上使用allowCasualMultipartParsing

推荐阅读
oDavid_仔o_880
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有