2016-06-30 11 views
6

Java + Spring'te bu kadar iyi değilim, ancak Cache-Control üstbilgisini ResponseEntity numarama eklemek istiyorum. Java + Spring Boot: CacheControl üstbilgisini ResponseEntity'ye eklemeye çalışıyorum

@RequestMapping(value = "/data/{id}", method = GET") 
public ResponseEntity<String> getData(@PathVariable("id") String id) { 
    try { 
      ... 
      HttpHeaders headers = new HttpHeaders(); 
      headers.setCacheControl("max-age=600"); 

      return new ResponseEntity<String>(body, headers, HttpStatus.OK); 
     } 
} 

Ben HttpHeaders için iki kod satırlarını eklendi ve şimdi benim cevap olarak iki Cache-Control başlıklarını olsun:
HTTP/1.1 200 OK 
Server: Apache-Coyote/1.1 
X-Content-Type-Options: nosniff 
X-XSS-Protection: 1; mode=block 
Cache-Control: no-cache, no-store, max-age=0, must-revalidate 
Pragma: no-cache 
Expires: 0 
X-Frame-Options: DENY 
Strict-Transport-Security: max-age=31536000 ; includeSubDomains 
Cache-Control: max-age=600 
Content-Type: application/json;charset=UTF-8 
Content-Length: 18223 
Date: Wed, 29 Jun 2016 21:56:57 GMT 

ben yanlış yaptım

? Birisi bana yardım eli verebilir mi?

Spring Security documentation gibi devletler

security.headers.cache=false 

Detaylar:;

+0

: Ayrıca

security.headers.cache=false 

, Cache-Control başlıklarını eklemenin daha deyimsel yolu, yeni cacheControl oluşturucu kullanmaktır Bahar Güvenliği? –

+0

Evet, uygulamanızın REST API'sına ulaşmak için temel kimlik doğrulaması var. – user3742622

cevap

14

TL

DR


Sadece application.properties şunu ekleyin

Bahar Güvenlik kullanıcılarını sağlar kolayca varsayılan sn enjekte uygulamalarını korumaya yardımcı olmak için başlıklarına başvurunuz. Bahar Güvenlik için varsayılan aşağıdaki başlıkları dahil etmektir:

Cache-Control: no-cache, no-store, max-age=0, must-revalidate 
Pragma: no-cache 
Expires: 0 
X-Content-Type-Options: nosniff 
Strict-Transport-Security: max-age=31536000 ; includeSubDomains 
X-Frame-Options: DENY 
X-XSS-Protection: 1; mode=block 

şimdi benim yanıt bunlardan

Bir Bahar Security tarafından sağlanan 2 CacheControl başlıklarını olsun. Bunları beğenmezseniz, sen senin WebSecurityConfigurerAdapter varsayılan Cache-Control başlıklarını devre dışı bırakabilirsiniz: Bahar Önyükleme kullandığınız için

@Configuration 
public class SecurityConfig extends WebSecurityConfigurerAdapter { 
    // Other configurations 

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

, sen security.headers.* özelliklerini kullanarak aynı elde edebilirsiniz. varsayılan Cache-Control başlık devre dışı bırakmak için, sadece senin application.properties aşağıdakileri ekleyin: Eğer kullanıyor musunuz

ResponseEntity.ok() 
       .cacheControl(CacheControl.maxAge(600, TimeUnit.SECONDS)) 
       .body(body); 
+1

Çok teşekkürler dostum! – user3742622

+0

harika, bu benim için de çalıştı. Bazı nedenlerden dolayı 'security.headers.cache = false' olayı sonuçları etkilemedi, ancak 'WebSecurityConfigurerAdapter' açık bir şekilde genişletildi. Artık denetleyicilerimin önbelleğe alma ilkelerini açıkça bildirmelerini sağladım. Büyük ipucu. – Antonio