Java Spring—在web请求完成和RequestMapping获取';触发
我正在寻找一种在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
@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);