Spring缓存控制过滤器值被webcontentgenerator覆盖

gojuced7  于 2021-07-24  发布在  Java
关注(0)|答案(0)|浏览(182)

我们将一个项目从spring迁移到springboot(版本2.2.5)。我们也有 Spring 安全措施。所以以前(使用“纯spring”)我们通过定义自己的abstractsecuritywebapplicationinitializer来覆盖afterspringfilterchain方法:

public class SecurityWebInitializer extends AbstractSecurityWebApplicationInitializer {

    @Override
    protected void afterSpringSecurityFilterChain(ServletContext servletContext) {
        servletContext.addFilter("MyCacheControlFilter", MyCacheControlFilter.class).addMappingForUrlPatterns(null, false, "/*");
    }

}

过滤器本质上的作用是为缓存控制响应头定义自定义值。

response.setHeader("Cache-Control", "max-age="31556926");

这工作正常,缓存控制已像预期的那样转移到web浏览器。
现在,由于切换到spring引导,这个方法似乎不再被调用了(调试器不会在应用程序启动或第一个请求时停止)。有人知道为什么吗?
目前,我们试图通过如下方式配置filterregistrationbean:

@Bean
public FilterRegistrationBean<MyCacheControlFilter> CacheControlFilterRegistrationBean() {
    FilterRegistrationBean<MyCacheControlFilter> registrationBean = new FilterRegistrationBean<>();
    registrationBean.setFilter(this.MyFilter);
    registrationBean.setOrder(Order.LOWEST_PRECEDENCE);
    registrationBean.setUrlPatterns("/**");
    return registrationBean;
}

虽然过滤器在启动期间被初始化,但请求中仍然没有调用它。在像这样将其包含到securityconfig中之后,它会在末尾被调用:

@Autowired
private FilterRegistrationBean myFilterBean;

...
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
...

@Override
protected void configure(HttpSecurity http) throws Exception {
...
http.addFilterAfter(myFilterBean.getFilter(),FilterSecurityInterceptor.class);
...
  }
}

这样,缓存控制由过滤器写入。但是,尽管配置为具有最低优先级,但缓存控制值会被webcontentgenerator及其 ccValue (webcontentgenerator.java第462行)。

cControl = (this.useCacheControlNoStore ? CacheControl.noStore() : CacheControl.noCache());

我们特别检查了这些文章的答案,但似乎没有任何效果-缓存控制头仍然被webcontentgenerator覆盖。
如何在SpringBoot中将缓存控制头添加到静态资源?禁用SpringSecurity头不起作用
如何将mycachecontrolfilter的缓存控制值再次传输到浏览器?

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题