我已将访问决策管理器配置为在servlet处理之前检查请求,关键行是: -
HttpServletRequest request = (HttpServletRequest) RequestContextHolder.currentRequestAttributes().getRequest();
一切都好。但是,当请求为enctype="multipart/form-data"
时,如果MultipartHttpServletRequest
仅返回RequestContextHolder.currentRequestAttributes().getRequest()
,我如何获取HttpServletRequest
?
我正在使用spring 2.5。
答案 0 :(得分:2)
MultipartHttpServletRequest
是用于处理多部分表单提交的特定于Spring的接口。默认实现是DefaultMultipartHttpServletRequest
,其构造函数采用HttpServletRequest
。
所以:
HttpServletRequest originalRequest = ((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes()).getRequest();
MultipartHttpServletRequest multiPartRequest = new DefaultMultipartHttpServletRequest(originalRequest);
答案 1 :(得分:2)
除了
<form method=<method> action=<url> enctype="multipart/form-data"></form>
你必须
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver" />
在弹簧配置文件中。
这是同一个
的精彩教程答案 2 :(得分:0)
您是否尝试过投射到MultipartHttpServletRequest
?
答案 3 :(得分:0)
如果您使用的是spring-mvc,请确保放入此行
<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver" />
在你的app-config.xml中。
这对我有用。
答案 4 :(得分:0)
我认为你不能从RequestContextHolder获取DefaultMultipartHttpServletRequest。 DefaultMultipartHttpServletRequest实际上实现了HttpServletRequest。 但是,如果您使用CommonsMultipartResolver,则有2个请求实例。一个是DefaultMultipartHttpServletRequest实例,另一个是HttpServletRequest实例。 实际上我不知道如何从RequestContextHolder获取第一个实例。你可以从中获得第二个实例。