2017-08-17 9 views
1

RequestMappingコールの前に何かを実行する方法を探しています。もう少しわかりやすくするために、私は以下のようなファイルアップロード用のコントローラーを持っています:Spring - Webリクエストが終了してRequestMapping getがトリガーされる前に実行

@Controller 
@RequestMapping("/ul") 
public class UploadController 
{ 

    @RequestMapping(value = "/{ticket}", method = RequestMethod.POST) 
    public String ul(ModelMap model, HttpServletResponse response, @PathVariable("ticket") String ticket) 
    { 
     ... 

これまでのところすべて正常に動作します。私の問題は今、私はアップロードチケットを使用してユーザーがファイルをアップロードできるかどうかを確認し、これらのチケットの寿命が限られている場合、ユーザーが実際に大きなファイルをアップロードしたり、接続不良が発生した場合には、無効となり、アップロードが中止されました。

接続が確立されたときに通知するために何かを実装する手段はありますか? URLが呼び出されたときのように、チケットを直接確認したり、接続を閉じることもできます。

私はすでに傍受者、抽象的なコントローラー、進行状況リスナーを持つコモンマルチパートリゾルバーを試しましたが、これはすべて遅く、アクション(ファイル転送)が完了するとイベントがトリガーされます。

答えて

1

さてあなたは、この目的のために、フィルタやキュータを使用することができ、フィルタはサーブレットコンテナが付属して、要求を操作するために使用することができ、執行ができますいくつかの執行

があり、春、MVCフレームワークが付属しています私たちは別の段階で切り口をつけます

+0

チップをありがとう。私はフィルタのアプローチを試みたが、 "doFilter"イベントはリクエストが完了した後にトリガされる。私は何か間違っているのですか? –

+0

WebSecurityConfigurerAdapterを継承するUploadSecurityクラスを追加しました。設定では、http.antMatcher( "/ ul/**")を追加しました。常に); –

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; 
    } 

} 

まだ私には謎である唯一のものは、フィルタの次数で、私はそれを動作させるためには非常に低い値を選択しなければなりませんでした。

関連する問題