Plusieurs antMatchers dans Spring security

Je travaille sur le système de gestion de contenu, qui a cinq antMatchers comme suit:

http.authorizeRequests()
        .antMatchers("/", "/*.html").permitAll()
        .antMatchers("/user/**").hasRole("USER")
        .antMatchers("/admin/**").hasRole("ADMIN")
        .antMatchers("/admin/login").permitAll()
        .antMatchers("/user/login").permitAll()
        .anyRequest().authenticated()
        .and()
        .csrf().disable();

Ce qui suppose que les visiteurs peuvent voir tout le site au chemin racine ( / * ), et les utilisateurs ne peuvent voir que (/user), admin ne peut voir que (/admin), et il y a deux pages de connexion une pour les utilisateurs et une autre pour admin.

Le code semble fonctionner correctement, sauf la section admin-cela ne fonctionne pas mais renvoie l'exception Access denied.

29
demandé sur informatik01 2015-06-13 16:42:03

1 réponses

Je crois que le problème est dans le commande de vos règles:

.antMatchers("/admin/**").hasRole("ADMIN")
.antMatchers("/admin/login").permitAll()

L'ordre des règles et des règles plus spécifiques devraient passer en premier. Maintenant, tout ce qui commence par /admin nécessitera un utilisateur authentifié avec un rôle D'administrateur, même le chemin /admin/login (Car /admin/login est déjà apparié par la règle /admin/** et donc la deuxième règle est ignorée).

La règle de la page de connexion doit donc passer avant la règle /admin/**. E. G.

.antMatchers("/admin/login").permitAll()
.antMatchers("/admin/**").hasRole("ADMIN")
51
répondu Bohuslav Burghardt 2015-12-22 14:33:53