2017-03-10 14 views
0

実行時に(カスタムアクチュエータエンドポイントを使用して)有効化/無効化するリクエストダンパーフィルタがあります。しかし、私はアプリを再起動せずにそうする方法を見つけることができません。私の現在のソリューションは、まさにそれを行います。Java Spring - 実行時にフィルタを追加および削除します。

@Component 
public class RequestdumperEndpoint implements Endpoint<Boolean > { 

    @Autowired 
    private RequestDumperFilter requestDumperFilter; 

    public String getId() { 
     return "requestdumper"; 
    } 

    public Boolean invoke() { 
     return requestDumperFilter.isEnabled(); 
    } 

    public Boolean setEnabled(Boolean enabled) { 
     return requestDumperFilter.setEnabled(enabled); 
    } 

しかし、明らかにそこISENABLEDとフィルタのメソッドをsetEnabledされていません。

@Configuration 
public class AppConfigs { 

    @Value("${request.dumper.active:false}") 
    private Boolean dumpActive; 

    @Bean 
    public FilterRegistrationBean requestDumperFilter() { 
     FilterRegistrationBean registration = new FilterRegistrationBean(); 
     Filter requestDumperFilter = new RequestDumperFilter(); 
     registration.setFilter(requestDumperFilter); 
     registration.addUrlPatterns("/*"); 
     registration.setEnabled(dumpActive); 
     return registration; 
    } 

は今、私はそのようなものを使用します。

どのように私は私が必要なものを得ることができるかもしれないアイデア?あなたがそれにフックできるよう

+0

[な行]上で何か(のhttp:/

public class MyWebInitializer extends AbstractAnnotationConfigDispatcherServletInitializer { @Value("${request.dumper.active:false}") private Boolean dumpActive; @Bean private MyRequestDumperFilter myRequestDumperFilter() { MyRequestDumperFilter filter = new MyRequestDumperFilter(); filter.setEnabled(dumpActive); return filter; } @Override protected String[] getServletMappings() { //.. return new String[0]; } @Override protected Filter[] getServletFilters() { return new Filter[]{myRequestDumperFilter()}; } @Override protected Class<?>[] getRootConfigClasses() { //.. return new Class<?>[0]; } @Override protected Class<?>[] getServletConfigClasses() { //.. return new Class<?>[0]; } } 

をあなたはフィルタリング、その後のようになります。 /stackoverflow.com/a/6856036/1910582)は役に立ちます –

答えて

1

まずBeanとして使用してフィルタを追加します。

public class MyRequestDumperFilter extends RequestDumperFilter{ 
     private Boolean enabled; 

     public void setEnabled(Boolean enabled) { 
      this.enabled = enabled; 
     } 

     public Boolean getEnabled() { 
      return enabled; 
     } 

     @Override 
     public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { 
      if (enabled) { 
       super.doFilter(request, response, chain); 
      } 
      else { 
       chain.doFilter(request,response); 
      } 
     } 
    } 
関連する問題