Spring Security - как убрать управление кешем по определенному шаблону URL

Я пытаюсь отфильтровать шаблон URL для кэширования. То, что я попытался, это положить некоторые коды в WebSecurityConfigurerAdapter реализация.

 @Override
protected void configure(HttpSecurity http) throws Exception {
    initSecurityConfigService();

    // For cache
    http.headers().defaultsDisabled()
            .cacheControl()
            .and().frameOptions();

    securityConfigService.configure(http,this);
}

Однако этот код будет влиять на все веб-приложения. Как я могу применить это к определенным URL или же Content-Type лайк images,

Я уже пробовал с RegexRequestMatcher, но это не работает для меня.

// For cache
        http.requestMatcher(new RegexRequestMatcher("/page/", "GET"))
                .headers().defaultsDisabled()
                .cacheControl()
                .and().frameOptions();

Я прочитал эту статью: SpringSecurityResponseHeaders, но нет примера для этого случая.

Благодарю.

PS Короче хочу удалить SpringSecurity defaults для определенных URL и ресурсов.

2 ответа

Решение

А как насчет наличия нескольких WebSecurityConfigurerAdapters? В одном адаптере могут быть элементы управления кэшем для определенных URL-адресов, а в другом не будет включено управление кэшем для этих URL-адресов.

Я решил это с Filter, Ниже приведена часть моей реализации AbstractAnnotationConfigDispatcherServletInitializer, В onStartup переопределение метода.

FilterRegistration.Dynamic springSecurityFilterChain = servletContext.addFilter("springSecurityFilterChain", new DelegatingFilterProxy());
if(springSecurityFilterChain != null){
    springSecurityFilterChain.addMappingForUrlPatterns(EnumSet.of(DispatcherType.REQUEST), true, "/render/*", "/service/*");
    // I removed pattern url "/image/*" :)
}

Что я сделал, это удалить /image/* от MappingUrlPatterns. Спасибо за ваши ответы!

Другие вопросы по тегам