2015-07-14 10 views
6

Mam aplikację i używam mapowania kontrolera sprężyny, aby załadować obrazy do moich użytkowników. (InputStream, odpowiedź itp.).Spring Security - Nie ma sposobu na uniknięcie kontroli pamięci podręcznej

W moim kontrolerze ustawiam nagłówki na kontrolę pamięci podręcznej, bazuję na plikach itp. Ale zawsze jest pragma: brak pamięci podręcznej i Cache-Control: "max-age = 0" wewnątrz wszystkich żądań, a to zastępuje moją odpowiedź ustawienia.

Próbowałem wszystkiego, aby to rozwiązać, ale nic nie działa.

ja już przeczytać całą stronę i spróbować wszystkiego znalazłem ten temat: http://docs.spring.io/autorepo/docs/spring-security/3.2.0.CI-SNAPSHOT/reference/html/headers.html

Moja wiosna security.xml posiada:

<security:headers disabled="true"/> 

ktoś ma dobry pomysł, aby rozwiązać ten problem?

Pamiętaj, że aby wczytać obrazy, które muszę załadować przez kontroler, nigdy nie wywołuję bezpośrednio statycznego.

+0

Czy możesz podać kod, którego używasz do ustawienia nagłówków w kontrolerze? Czy problem nadal występuje, jeśli całkowicie usuniesz Spring Security? –

Odpowiedz

0

Per Spring Security reference (3.2.0) już związane,

Wszystkie nagłówki domyślnych można łatwo dodawać za pomocą elementu bez elementów podrzędnych

prostu dodając headers sama włącza wszystkie elementy podrzędne (np. kontrola pamięci podręcznej, xxs, ...). Albo nie dołączaj w ogóle nagłówków lub wyraźnie określ, które elementy podrzędne mają być włączone.

BTW, nie sądzę, że disabled jest atrybutem nagłówków (dla wersji 3.2.0). Jeśli używasz version 4.0, istnieje atrybut disabled oraz disabled-defaults, który może być tym, którego potrzebujesz.

+0

Próbowałem teraz i nie rozwiązałem. Chcę usunąć "brak pamięci podręcznej" moich żądań, bez uwzględniania ich. –

+0

Co próbowałeś? Czy możesz pokazać, jak wygląda twoja zaktualizowana konfiguracja? – ikumen

+0

Jasne, config teraz jest: \t \t \t \t \t \t \t \t \t \t \t \t \t

-1

To było kiedyś - ale podczas badania tego samego problemu, znalazłem ten post i to działało albo ja -

disable caching for specific url in spring security

Piękno rozwiązania, o którym mowa powyżej, jest to, że umożliwia każdy nagłówek specjalnie używa swojej oryginalnej klasy i używa antematchers do wyrównania konkretnych ścieżek żądań do odpowiedniego nagłówka. W moim przypadku użyłem osobnego odniesienia do pamięci podręcznej dla moich zasobów statycznych z zestawem wygasania pamięci podręcznej i innym dla wszystkich jspów bez pamięci podręcznej. Ponieważ jest to ant matcher, kontroler uri może być dopasowany przy użyciu tego samego podejścia.

7

W przypadku, jeśli ktoś używa konfigurację opartą na technologii Java, nagłówki kontroli pamięci podręcznej może być wyłączona w ten sposób:

@Configuration 
@EnableWebMvcSecurity 
class SpringWebSecurityConfig extends WebSecurityConfigurerAdapter { 

    @Override 
    protected void configure(final HttpSecurity http) throws Exception { 
     http.headers().cacheControl().disable(); 
    } 
} 

Spowoduje to usunięcie CacheControlHeadersWriter i wiosna nie będzie pisać nagłówki kontroli pamięci podręcznej więcej.

+0

Gdzie mogę umieścić tę konfigurację? –

+0

Dzięki za odpowiedź. Pracuje dla mnie. –

11

The Cache-Control nagłówków może być kontrolowana na podstawie jednej akcji poprzez nadpisanie ich w HttpServletResponse:

@RequestMapping(value = "/foo", method = RequestMethod.GET) 
public String someAction(HttpServletResponse response) { 
    response.setHeader("Cache-Control", "no-transform, public, max-age=86400"); 

    // ... 
} 

Nie trzeba się bawić z konfiguracją Wiosna Bezpieczeństwa.

Zobacz http://docs.spring.io/spring-security/site/docs/current/reference/html/headers.html#headers-cache-control.

+0

To jest TYLKO podejście, które znalazłem w pracy. Dziękuję Ci bardzo! –

+0

Dziękuję bardzo. Twoje rozwiązanie zaoszczędziło dużo czasu. – harshavmb

+3

Powoduje to duplikowanie nagłówka zamiast przesłonięcia go. Otrzymuję 'no-cache, no-store, max-age = 0, must-revalidate, max-age = 7200' – Kumait

0

Dodanie do odpowiedzi aha. Musisz także zastąpić nagłówek Pragma niektórymi śmieciami.

@RequestMapping(value = "/foo", method = RequestMethod.GET) 
public String someAction(HttpServletResponse response) { 
    response.setHeader("Cache-Control", "no-transform, public, max-age=86400"); 
    response.setHeader("Pragma", ""); 
    // ... 
} 

Nagłówek Expires również nadal wskazuje w odpowiedzi, ale wydaje się być przesłonięte przez nagłówek Cache-Control w większości przeglądarek.

Powiązane problemy