【问题标题】:Authentication issue in spring-security-core:2.0.0spring-security-core:2.0.0 中的身份验证问题
【发布时间】:2016-12-22 17:24:07
【问题描述】:

我在我的 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")
   }
}

【问题讨论】:

    标签: grails


    【解决方案1】:

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

    首先,尝试将“/”(view:'auth',controller:'login')改为

    "/"(controller:'login') 
    

    这将确保您在成功验证后导航到正确的 LoginController。当前条目尝试呈现在您的 LoginController 中没有相应操作的 auth.gsp。仅指定控制器时,默认调用该控制器的索引操作。

    其次,在Config.groovy文件中为其他UrlMapping指定一个controllerAnnotation.staticRules值:"/admin"(view:'adminPage')

    grails.plugin.springsecurity.controllerAnnotations.staticRules = [
        '/adminPage' : ['ROLE_ADMIN'] ]
    

    这可确保为 adminPage 静态视图配置正确的授权,因为 /admin 根据您的 UrlMapping 解析为 /adminPage。

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

    【讨论】:

      猜你喜欢
      • 2019-04-08
      • 1970-01-01
      • 2016-05-29
      • 2014-05-11
      • 2013-05-13
      • 2012-11-10
      • 2011-10-20
      • 1970-01-01
      • 2016-11-02
      相关资源
      最近更新 更多