2017-03-07 3 views
2

J'essaie de filtrer certains modèles d'URL à la mise en cache. Ce que j'ai essayé est de mettre des codes dans l'implémentation WebSecurityConfigurerAdapter.sécurité de printemps - comment supprimer le contrôle de cache dans certains modèle d'URL

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

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

    securityConfigService.configure(http,this); 
} 

Toutefois, ce code affectera l'ensemble de l'application Web. Comment puis-je l'appliquer à certains URL ou Content-Type comme images.

J'ai déjà essayé avec RegexRequestMatcher, mais ça ne marche pas pour moi.

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

Je lis cet article: SpringSecurityResponseHeaders, mais il n'y a pas d'échantillon pour ce cas.

Merci.

P.S. En bref, je veux supprimer SpringSecurity defaults pour certaines URL et ressources.

+0

peut-être que je ne comprends pas bien votre question. Puisque vous voulez ajouter un contrôle de cache pour les requêtes générales, pourquoi Spring Security est-il impliqué? Pouvez-vous essayer d'ajouter un filtre pour cela? – Simon

+0

@Simon Les paramètres par défaut de la sécurité doivent être valables pour les appels généraux, mais je veux cette option uniquement pour les types 'image/*'. C'est pourquoi je veux séparer ces options. –

+0

Je comprends ce point, mais pour moi, c'est très simple avec un filtre, vous pouvez configurer un motif d'URL (dans votre cas image/*) pour filtrer. Vous venez de définir des en-têtes dans la réponse, alors tout devrait être réglé. Si vous préférez Spring Security, il a la chaîne de filtre, vous ajoutez juste un filtre après le dernier et définissez la réponse – Simon

Répondre

1

Qu'en est-il de plusieurs WebSecurityConfigurerAdapters? Un adaptateur peut avoir des contrôles de cache pour certaines URL et un autre n'a pas de contrôle de cache activé pour ces URL.

+1

Ceci est une information supplémentaire pour aider les autres. Pour avoir plusieurs 'WebSecurityConfigurerAdapter', vous devez modifier le' @ Order' des outils. La valeur par défaut est cachée, mais la valeur est '100' et elle ne doit pas être dupliquée. peut se référer à ce document [doc] (http://docs.spring.io/spring-security/site/docs/current/apidocs/org/springframework/security/config/annotation/web/configuration/WebSecurityConfigurerAdapter.html) –

0

J'ai résolu ceci avec Filter. Ci-dessous une partie de ma mise en œuvre de AbstractAnnotationConfigDispatcherServletInitializer. Dans onStartup, remplacez la méthode.

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/*" :) 
} 

Ce que je l'ai fait est de retirer /image/* de MappingUrlPatterns. Merci pour vos réponses!

+1

Il existe un autre moyen régulier de le faire. Utilisez ['WebSecurity # ignoring'] (http://docs.spring.io/spring-security/site/docs/current/apidocs/org/springframework/security/config/annotation/web/builders/WebSecurity.html#ignoring -). – dur

+0

@dur Merci. C'était ce que je cherchais. bb –