grails - spring-security-core中的身份验证问题:2.0.0

标签 grails

我在Grails应用程序中使用spring-security-core:2.0.0。但是,即使在成功通过身份验证之后,页面仍会显示一条消息“对不起,您无权查看此页面。”我以ROLE_ADMIN身份登录,我想根据角色重定向到两个页面。对于管理员角色,我需要进入管理页面,对于用户角色,我想进入用户页面。

这是我的UrlMappings.groovy

class UrlMappings {

   static mappings = {
      "/$controller/$action?/$id?"{
         constraints {
            // apply constraints here
         }
      }

   /* get "/"(controller:"book", action:"index")
      get "/books/create"(controller:"book", action:"create")
      post "/books"(controller:"book", action:"save")
      get "/books/$id"(controller:"book", action:"show")
      get "/books/$id/edit"(controller:"book", action:"edit")
      put "/books/$id"(controller:"book", action:"update")
      delete "/books/$id"(controller:"book", action:"delete")
   */

      "/"(view:'auth',controller:'login')
      "/admin"(view:'adminPage')

      "500"(view:'/error')
   }
}

LoginController.groovy
package com.standout.utilityapplication

import grails.plugin.springsecurity.annotation.Secured

class LoginController {

   def springSecurityService

   @Secured(['ROLE_ADMIN', 'ROLE_USER'])
   def index() {   
      println "INDEX PAGE RENDER FROM MY CONTROLLER";
      def roles = springSecurityService.getPrincipal().getAuthorities()
      println roles;

      if(roles.toString().contains("ROLE_ADMIN"))
      {
         println "admin"
         redirect(uri: "/admin")
      }
      else
      {
         println "not admin"
         redirect(uri: "/dataentry")
      }
   }

   @Secured('ROLE_USER')
   def nonadmin()
   {
      println("===notadmin")
   }

   @Secured('ROLE_ADMIN')
   def admin()
   {
      println("====admin")
   }
}

最佳答案

我认为问题是由您的UrlMapping条目和安全配置引起的。

首先,尝试将“/”( View :'auth', Controller :'登录')更改为

"/"(controller:'login') 

一旦成功进行身份验证,这将确保您导航到LoginController的正确性。当前条目尝试呈现一个在您的LoginController中没有相应 Action 的auth.gsp。仅指定 Controller 时,默认情况下将调用该 Controller 的index操作。

其次,在Config.groovy文件中为另一个UrlMapping指定一个controllerAnnotation.staticRules值:“/ admin”( View :'adminPage')
grails.plugin.springsecurity.controllerAnnotations.staticRules = [
    '/adminPage' : ['ROLE_ADMIN'] ]

由于/ admin根据您的UrlMapping解析为/ adminPage,因此可以确保为adminPage静态 View 配置了正确的授权。

请参阅以下Spring Security文档以获取更多详细信息:
http://grails-plugins.github.io/grails-spring-security-core/v2/guide/requestMappings.html#securedAnnotations

关于grails - spring-security-core中的身份验证问题:2.0.0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38973145/

相关文章:

grails - GORM : mapping large text fields database agnostically

grails - 如果已经在yml根目录中定义了Grails application.yml,则如何使用这些特定于环境的条目?

grails - 在Grails中索引 “has many”属性

oracle - 如何在Grails中删除子域行

grails - 计算多对多关系中的关系

grails 1.3.7 - GORM 对可空反射多对一关系的误解(可能的错误?)

grails - Groovy 方法重载

grails - 将taglib标记与MarkupBuilder一起使用

unit-testing - 由于错误,无法测试我的 grails 应用程序

Grails 4 替代 DefaultGrailsDomainClass?