web-dev-qa-db-fra.com

Utilisation correcte de WebSecurity dans WebSecurityConfigurerAdapter

Dans mon Spring Boot application basée sur la version 1.3.0.BUILD-SNAPSHOT, j'ai les ressources statiques (images, css, js) du dossier static sous resources.

Je vois des exemples liés à la configuration de la sécurité comme suit:

@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    public void configure(final WebSecurity web) throws Exception {
        web.ignoring()
           .antMatchers("/static/**");
    }
}

Cet exemple est-il correct? Quel devrait être l'effet? Comment vérifier que cela fonctionne (par exemple, faire une demande à localhost:8080/something? Quelles choses cool puis-je faire avec WebSecurity?

9
JeanValjean

Votre exemple signifie que Spring (Web) Security ignore le modèle d’URL qui correspond à l’expression que vous avez définie ("/static/**"). Cette URL est ignorée par la sécurité, donc non sécurisée.

Permet l'ajout d'instances RequestMatcher devant être ignorées par Spring Security. La sécurité Web fournie par Spring Security (y compris SecurityContext) ne sera pas disponible sur HttpServletRequest correspondante. En règle générale, les demandes enregistrées doivent être celles de ressources statiques uniquement. Pour les demandes dynamiques, envisagez de mapper la demande pour autoriser tous les utilisateurs. 

Voir: http://docs.spring.io/autorepo/docs/spring-security/4.0.0.RELEASE/apidocs/org/springframework/security/config/annotation/web/builders/WebSecurity.html

Vous pouvez avoir autant d’URL-Pattern sécurisés que non sécurisés ..___. Avec Spring Security, vous disposez de fonctionnalités d’authentification et de contrôle d’accès pour la couche Web d’une application. Vous pouvez également autoriser les utilisateurs qui ont un rôle spécifié à accéder à une URL partielle, par exemple ... Regardez ici: http://docs.spring.io/spring-security/site/ docs/current/reference/html/

Priorité de commande du modèle d'URL

Lors de la mise en correspondance des modèles spécifiés avec une demande entrante, la mise en correspondance est effectuée dans l'ordre dans lequel les éléments sont déclarés. Ainsi, les modèles de correspondances les plus spécifiques doivent venir en premier et les plus généraux en dernier.

La méthode http.authorizeRequests () comporte plusieurs enfants chaque matcher est considéré dans l'ordre dans lequel il a été déclaré.

Les modèles sont toujours évalués dans l'ordre dans lequel ils ont été définis. Il est donc important que des motifs plus spécifiques soient définis plus haut dans la liste que des motifs moins spécifiques.

Jetez un coup d'oeil: http://docs.spring.io/spring-security/site/docs/current/reference/htmlsingle/#filter-security-interceptor

Exemple 1
Utilisation générale de WebSecurity ignoring() La méthode omet Spring Security et aucune des fonctionnalités de Spring Security ne sera disponible . WebSecurity est basé sur HttpSecurity. Dans Xml-Configuration, vous pouvez écrire <http pattern="/resources/**" security="none"/>.

@Override
public void configure(WebSecurity web) throws Exception {
    web
        .ignoring()
        .antMatchers("/resources/**")
        .antMatchers("/publics/**");
}

@Override
protected void configure(HttpSecurity http) throws Exception {
    http
        .authorizeRequests()
        .antMatchers("/admin/**").hasRole("ADMIN")
        .antMatchers("/publics/**").hasRole("USER") // no effect
        .anyRequest().authenticated();
}

Dans l'exemple ci-dessus, WebSecurity a laissé Spring ignorer /resources/** et /publics/**. Par conséquent, la .antMatchers("/publics/**").hasRole("USER") dans HttpSecurity n'est pas prise en compte.

Cela omettra entièrement le modèle de demande de la chaîne de filtres de sécurité. Notez que tout ce qui correspond à ce chemin n'aura alors aucun service d'authentification ou d'autorisation et sera librement accessible.

Exemple 2
Les modèles sont toujours évalués dans l’ordre. La correspondance ci-dessous est invalide car la première correspond à chaque demande et n'appliquera jamais la deuxième correspondance:

@Override
protected void configure(HttpSecurity http) throws Exception {
    http
        .authorizeRequests()
        .antMatchers("/**").hasRole("USER")
        .antMatchers("/admin/**").hasRole("ADMIN"):
}
19
sven.kwiotek

Dans le code que vous avez partagé, si vous aviez vos fichiers statiques, c.-à-d. CSS/JS, etc. dans un dossier appelé static, toutes vos ressources statiques seront ajoutées à la page, alors que si vous les avez laissés de côté,

web.ignoring()
    .antMatchers("/static/**");

aucune de vos ressources statiques ne sera chargée.

Spring Security est extrêmement puissant, Spring possède une excellente documentation, vous devez donc aller lire à ce sujet et l'apprécier pleinement.

Voici un link

0
PaulRyan17