Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 非Spring MVC应用程序中的MultipartFilter_Java_Spring_Servlet Filters_Multipartform Data - Fatal编程技术网

Java 非Spring MVC应用程序中的MultipartFilter

Java 非Spring MVC应用程序中的MultipartFilter,java,spring,servlet-filters,multipartform-data,Java,Spring,Servlet Filters,Multipartform Data,在Tomcat6中的Javaservlet(2.5)中,我们使用Spring和SpringSecurity3,但不使用SpringMVC。我们试图实现CSRF安全性,因此我们在所有表单中添加了\u CSRF令牌。对于文件上载,我们在web.xml中添加了org.springframework.web.multipart.support.MultipartFilter,并修复了commons文件上载依赖项 我们可以看到请求已被解析和包装,但spring security也在再次包装请求,因此我们不

在Tomcat6中的Javaservlet(2.5)中,我们使用Spring和SpringSecurity3,但不使用SpringMVC。我们试图实现CSRF安全性,因此我们在所有表单中添加了
\u CSRF
令牌。对于文件上载,我们在
web.xml
中添加了
org.springframework.web.multipart.support.MultipartFilter
,并修复了commons文件上载依赖项

我们可以看到请求已被解析和包装,但spring security也在再次包装请求,因此我们不能再访问多部分数据了,是吗?我尝试将请求对象强制转换为
multipartttpServletRequest
,但失败了。internet上的所有示例都显示了如何在SpringMVC控制器中访问文件项。我在这里有点迷路了。
所有这些包装都是从标准接口扩展而来的。只需对其进行强制转换,通过方法获取包装的请求,然后测试它

如果它实际返回了另一个
ServletRequestWrapper
实现,您甚至可以在循环中执行

public static <R extends ServletRequest> R unwrap(ServletRequest request, Class<R> type) {
    ServletRequest current = request;

    while (!type.isInstance(current) && current instanceof ServletRequestWrapper) {
        current = ((ServletRequestWrapper) current).getRequest();
    }

    return type.isInstance(current) ? type.cast(current) : null;
}


至于额外的问题:您的webapp的运行时类路径包含Servlet3.0+API。如果这不是目的,那么它很可能只是一个脏的运行时类路径。只需清理它就可以摆脱Servlet3.0+库。webapp的运行时类路径所涵盖的文件夹有a.o.WAR的
/WEB-INF/lib
、server的
/lib
和JRE的
/lib

尽管我喜欢BalusC更好地解决它的方式(使用while循环与递归),但我认为值得一提的是

import org.springframework.web.util.WebUtils;
...
WebUtils.getNativeRequest(request, MultipartHttpServletRequest.class);

做同样的事情,但只是用一个递归,但在一个受良好支持的Lib类中:)

额外的问题:我确信我们只使用servlet2.5,为什么存在HttpServlet3RequestFactory!?你能发布你的
web.xml
吗?太好了,可以了!谢谢我想我找到了servlet 3.0出现的原因。。。我的开发机器使用Tomcat7,它在lib文件夹中有Servlet3.0API。不客气。如果Spring在
web.xml
中选中
version
,它会玩得更好。
import org.springframework.web.util.WebUtils;
...
WebUtils.getNativeRequest(request, MultipartHttpServletRequest.class);