我正在寻找在RequestMapping调用之前执行某些操作的方法。为了更具描述性,我有一个文件上传控制器,如:
@Controller
@RequestMapping("/ul")
public class UploadController
{
@RequestMapping(value = "/{ticket}", method = RequestMethod.POST)
public String ul(ModelMap model, HttpServletResponse response, @PathVariable("ticket") String ticket)
{
...
到目前为止一切正常。我现在的问题是,我使用上传票据验证用户是否可以上传文件,这些票证的生命周期有限,当用户上传一个非常大的文件或连接错误时,这将花费几分钟时间无效,上传中断。
在建立连接时是否有任何方法可以实现某些通知?就像调用URL一样,我可以直接验证票证,甚至可以关闭连接?
我已经尝试了一个拦截器,抽象控制器,使用进程监听器来公共多部分解析器,但所有这些都是迟到的,并且当动作(文件传输)完成时事件被触发。
答案 0 :(得分:1)
那么你可以为此目的使用过滤器或执行器,过滤器附带servlet容器并可用于操作请求,执行器附带spring-mvc框架,有几个执行器
给了我们不同阶段的切分点
答案 1 :(得分:0)
看起来我现在已经开始工作了!
我创建了一个UploadFilter类:
@Component
public class UploadFilter implements Filter
{
@Override
public void init(FilterConfig filterConfig) throws ServletException
{
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException
{
chain.doFilter(request, response);
}
@Override
public void destroy()
{
}
}
并将FilterRegistrationBean添加到上传配置类:
@Configuration
public class UploadConfiguration
{
@Bean
public MultipartConfigElement multipartConfigElement()
{
MultipartConfigFactory factory = new MultipartConfigFactory();
factory.setMaxFileSize("2000MB");
factory.setMaxRequestSize("2000MB");
return factory.createMultipartConfig();
}
@Bean
public FilterRegistrationBean uploadFilter()
{
FilterRegistrationBean filterRegBean = new FilterRegistrationBean();
filterRegBean.setFilter(new UploadFilter());
filterRegBean.addUrlPatterns("/ul/*");
filterRegBean.setEnabled(Boolean.TRUE);
filterRegBean.setName("uploadFilter");
filterRegBean.setAsyncSupported(Boolean.TRUE);
filterRegBean.setOrder(Integer.MAX_VALUE + 1);
return filterRegBean;
}
}
对我来说唯一仍然是个谜的是过滤器顺序,我必须选择一个非常低的值才能让它工作......