gpt4 book ai didi

Java Spring - 在运行时添加和删除过滤器

转载 作者:行者123 更新时间:2023-12-02 13:41:39 25 4
gpt4 key购买 nike

我有一个请求转储过滤器,我想在运行时激活/停用(使用自定义执行器端点)。但是,我无法找到无需重新启动应用程序即可执行此操作的方法。我当前的解决方案就是这样做的:

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

现在我想使用类似的东西:

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

但显然 Filter 上没有 isEnabled 和 setEnabled 方法。

有什么想法可以让我得到我需要的东西吗?

最佳答案

首先添加你的过滤器作为一个bean,这样你就可以挂接到它:

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

您的过滤器将类似于:

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

关于Java Spring - 在运行时添加和删除过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42714322/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com