spring安全性和多部分
问题内容:
问题是当我添加文件上传时,过滤器无法在请求中找到令牌(我认为原因是请求具有多部分类型)
我正在使用CommonsMultipartResolver
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize" value="100000000"/>
</bean>
和简单的弹簧控制器来接收文件 @RequestParam("pic") MultipartFile pic
为了解决我修改的问题,如果请求具有多部分类型,则进行令牌检索:
if(request.getContentType().contains("multipart/form-data")){
List<FileItem> items = new ServletFileUpload(new DiskFileItemFactory()).parseRequest((HttpServletRequest) request);
for (FileItem item : items) {
if (item.isFormField() && item.getFieldName().equals("token")) {
return item.getString();
}
}
}
最终,在此修改之后,身份验证可以工作,但是在控制器MultipartFile中不发送更多消息,因此它引发异常,即请求中没有参数。我如何解决此问题以能够通过令牌身份验证接收文件?
问题答案:
我认为您需要添加MultipartFilter。如何执行此操作取决于所使用的配置样式。在我们的例子中,我们在方法中添加了以下几行WebApplicationInitializer.onStartup()
:
FilterRegistration.Dynamic multipartFilter = servletContext.addFilter("multipartFilter", new MultipartFilter());
multipartFilter.addMappingForUrlPatterns(EnumSet.of(DispatcherType.REQUEST), false, "/*");