web-dev-qa-db-fra.com

Configuration de sécurité Spring - HttpSecurity vs WebSecurity

J'ai juste besoin de comprendre quelque chose dans Spring Security Configuration. En utilisant l'exemple ci-dessous ...

@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .httpBasic()
            .and()
            .authorizeRequests().antMatchers("/secret/**").authenticated()
            .and()
            .authorizeRequests().antMatchers("/**").permitAll();
    }

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

}

Quel est le but de la méthode configure(WebSecurity web)?

Je ne peux pas simplement ajouter /resources/** Dans la méthode configure(HttpSecurity http) dans cette ligne .authorizeRequests().antMatchers("/**", "/resources/**").permitAll(); Ne devrait-il pas fonctionner de la même façon, c'est-à-dire autoriser toutes les requêtes à /resources/** sans aucune authentification?

10
Kihats

Utilisation générale de la méthode WebSecurity ignoring()omet Spring Security et aucune des fonctionnalités de Spring Security ne sera disponible. WebSecurity est basé sur HttpSecurity.

@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();
}

WebSecurity dans l'exemple ci-dessus permet à Spring d'ignorer /resources/** Et /publics/**. Par conséquent, la .antMatchers("/publics/**").hasRole("USER") dans HttpSecurity est non considérée.

Cela supprimera complètement 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 appliqué et sera librement accessible.

configure(HttpSecurity) permet la configuration de la sécurité basée sur le Web à un niveau de ressource, basé sur une correspondance de sélection - par ex. L'exemple ci-dessous restreint les URL commençant par /admin/ Aux utilisateurs ayant rôle ADMIN, et déclare que toutes les autres URL doivent être authentifiées avec succès.

configure(WebSecurity) est utilisé pour les paramètres de configuration qui impact sur la sécurité globale (ignorer les ressources, définir le mode de débogage, rejeter les demandes en implémentant une définition de pare-feu personnalisée). Par exemple, la méthode suivante ferait en sorte que toute requête commençant par /resources/ Soit ignorée pour l'authentification à des fins.

16
Patel Romil

Lorsque vous utilisez HttpSecurity et essayez de permitAll() les demandes. Vos demandes seront autorisées à accéder à partir de la chaîne de filtrage de sécurité Spring. Ceci est coûteux car il y aura des demandes d'autres demandes qui viendraient également dans cette chaîne de filtrage qui doit être autorisée ou refusée en fonction de l'authentification/autorisation.

HttpSecurity.authorizeRequests().antMatchers("/**", "/resources/**").permitAll();

Mais lorsque vous utilisez, toutes les demandes à resources contourneront complètement la chaîne de filtres de sécurité Spring. Il est sûr car vous n'avez besoin d'aucune authentification/autorisation pour voir une image ou lire un fichier javascript.

WebSecurity.ignoring().antMatchers("/resources/**");
4
shazin

configure (HttpSecurity): Il permet de configurer la sécurité basée sur le Web pour des requêtes http spécifiques. Il est utilisé pour la configuration de la sécurité basée sur le Web au niveau des ressources, sur la base d'une correspondance de sélection.

configure (WebSecurity): permet d'ajouter des instances RequestMatcher que Spring Security doit ignorer.

2
adiraju uttej