2017-03-10 3 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

뭔가를 /stackoverflow.com/a/6856036/1910582) 도움이 될 수 있습니다. –

답변

1

첫 번째는 빈으로 사용하여 필터를 추가 :

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]; 
    } 
} 
다음과 같이 보일 것

당신 필터 :/: [유사한 라인 (HTTP에

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