2017-03-30 1 views
0

Je développe une application web en utilisant Grails, et j'essaie d'utiliser le Admin Interface Plugin. Pour fins de test, j'ai créé un administrateur de BootStrap.groovy en utilisant les lignes de code suivantes:Grails - Spring Security Plugin - L'utilisateur a 'ROLE_NO_ROLES' après avoir ajouté 'ROLE_ADMIN'

def init = { servletContext -> 
    def adminUser = User.findByUsername("episo_admin_root") 
     if(!adminUser){ 
      print "Creating admin user... " 
      adminUser = new User(username: username, emailAddress: emailAddress, password: password, birthDate: new Date(1, 1, 1), 
        sex: Sex.AGENDER, enabled: true, accountConfirmed: true, accountCreationDate: new Date()) 
      adminUser.save(flush: true, failOnError: true) 
      def auth = adminUser.addAuthority(Roles.ROLE_ADMIN) 
      auth.save(flush: true, failOnError: true) 
     } 
} 

J'ai aussi ajouté la déclaration suivante pour vérifier si oui ou non l'utilisateur obtenait le rôle:

if(adminUser.authorities.any { it.authority == Roles.ROLE_ADMIN }) println "Admin role added."

Cette vérification est réussie et le "rôle Admin est ajouté". est imprimé sur la console. Voici ma configuration pour la sécurité Spring:

grails.plugin.springsecurity.rejectIfNoRule = true 
grails.plugin.springsecurity.fii.rejectPublicInvocations = false 
grails.plugin.springsecurity.interceptUrlMap = [ 
       '/':      ['permitAll'], 
       '/home':     ['permitAll'], 
       '/home.gsp':    ['permitAll'], 
       '/assets/**':    ['permitAll'], 
       ... 
       ... 
       '/**/js/**':    ['permitAll'], 
       '/**/css/**':    ['permitAll'], 
       '/**/images/**':   ['permitAll'], 
       '/**/favicon.ico':  ['permitAll'], 
       '/admin/**':    ['ROLE_ADMIN'] 
     ] 

Et voici ma configuration pour l'interface d'administration Plugin:

grails.plugin.admin.accessRoot = "/admin" 
grails.plugin.admin.domains."Users" = [ "mypackage.User" ] 
grails.plugin.admin.domains."My Groups" = [ "mypackage.Group" ] 
grails.plugin.admin.domains."Security Groups" = [ 'mypackage.Authority', 'mypackage.UserAuthority' ] 
grails.plugin.springsecurity.active = true 
grails.plugin.springsecurity.useBasicAuth = true 
grails.plugin.admin.security.role = "ROLE_ADMIN" 

Cependant, quand je me connecte en tant que nouvel utilisateur admin et accédez à «/admin », je reçois le Apache Tomcat "HTTP Status 403 - Accès refusé" page et les informations de débogage suivant est enregistré à la console:

Secure object: FilterInvocation: URL: /admin; Attributes: [ROLE_ADMIN] 
Previously Authenticated: org.springframew[email protected]5ff53bc5: Principal: [email protected]: Username: [PROTECTED]; Password: [PROTECTED]; Enabled: true; AccountNonExpired: true; credentialsNonExpired: true; AccountNonLocked: true; Granted Authorities: ROLE_NO_ROLES; Credentials: [PROTECTED]; Authenticated: true; Details: org.sprin[email protected]957e: RemoteIpAddress: [PROTECTED]; SessionId: null; Granted Authorities: ROLE_NO_ROLES 

Si vous faites défiler sidew ays sur cette information de débogage, vous verrez que Spring Security voit les "Autorisations accordées" comme étant ROLE_NO_ROLES.

Est-ce que je fais quelque chose de mal lors de l'ajout du rôle à l'utilisateur? Pourquoi Spring Security ne verra-t-il pas que j'ai accordé cet utilisateur ROLE_ADMIN?

J'ai passé des heures à essayer de déboguer cela et je ne peux pas comprendre ce qui ne va pas avec mon code.

Répondre

0

Je l'ai compris; J'ai supprimé la ligne suivante du fichier de configuration qui a résolu mon problème:

grails.plugin.springsecurity.useRoleGroups = true