在Tomcat 6的Java servlet(2.5)中,我们使用Spring和Spring security 3,但没有使用Spring MVC。我们尝试实现CSRF安全性,因此我们将_csrf
令牌添加到了所有表单中。对于文件上传,我们在中添加org.springframework.web.multipart.support.MultipartFilter
了web.xml
,还修复了commons-fileupload依赖性。
我们可以看到请求已被解析和包装,但是spring security也再次包装了请求,因此我们不能再访问多部分数据了,可以吗?我尝试将请求对象强制转换为,MultipartHttpServletRequest
但是失败了。互联网上的所有示例都展示了如何在Spring MVC控制器中访问文件项。我在这里迷路了。
所有这些包装器都从标准ServletRequestWrapper
接口扩展。只是强制转换为它,通过getRequest()
方法获取包装的请求并对其进行测试。
如果它实际上返回了另一个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;
}
用法:
MultipartHttpServletRequest multipartRequest = unwrap(request, MultipartHttpServletRequest.class);
// ...
关于额外的问题:您的Web应用程序的运行时类路径包含Servlet 3.0+ API。如果这不是目的,那么很可能只是一个肮脏的运行时类路径。只需清理它即可摆脱Servlet 3.0+库。Webapp的运行时类路径覆盖的文件夹是WAR /WEB-INF/lib
,Server/lib
和JRE /lib
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句