Java Spring—在web请求完成和RequestMapping获取';触发

Java Spring—在web请求完成和RequestMapping获取';触发,java,spring,spring-mvc,spring-boot,Java,Spring,Spring Mvc,Spring Boot,我正在寻找一种在RequestMapping调用之前执行某些操作的方法。更具描述性的是,我有一个用于文件上传的控制器,如: @Controller @RequestMapping("/ul") public class UploadController { @RequestMapping(value = "/{ticket}", method = RequestMethod.POST) public String ul(ModelMap model, HttpServletRe

我正在寻找一种在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被调用时,我可以直接验证票证,甚至可以关闭连接


我已经尝试了一个拦截器、抽象控制器、带有进程侦听器的commons multipart resolver,但所有这些都太晚了,并且在操作(文件传输)完成时会触发事件。

您可以为此使用过滤器或执行器,过滤器随servlet容器一起提供,可以用来处理请求,执行器随SpringMVC框架而来,有几个执行器

这给了我们不同阶段的切分点


看来我现在已经开始工作了

我创建了一个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;
    }

}

唯一对我来说仍然是个谜的是过滤器顺序,我必须选择一个非常低的值才能让它工作…

谢谢你的提示。我尝试了过滤方法,但在请求完成后会触发“doFilter”事件。我做错了什么吗?我添加了一个UploadSecurity类来扩展WebSecurity配置适配器,并在配置中添加了:http.antMatcher(“/ul/**”).addFilterBefore(new UploadFilter(),BasicAuthenticationFilter.class)。sessionManagement().sessionCreationPolicy(sessionCreationPolicy.ALWAYS);