当前位置: 首页 > 知识库问答 >
问题:

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

严繁
2023-03-14

我在Grails应用程序中使用了Spring Security核心:2.0.0。但即使在成功验证后,页面仍会显示消息“抱歉,您无权查看此页面”我以ROLE_ADMIN登录,我想根据角色重定向到两个页面。对于管理员角色,我需要转到管理员页面,对于用户角色,我要转到用户页面。

这是我的网址映射.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")
   }
}

共有1个答案

巢承安
2023-03-14

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

首先,尝试将“/”(视图:“身份验证”,控制器:“登录”)更改为

"/"(controller:'login') 

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

其次,在Config.groovy文件中为另一个UrlMapping指定controller annotation . static rules值:"/admin "(视图:' adminPage ')

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

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

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

 类似资料:
  • 我正在开发一个Web应用程序 然而,我在尝试允许用户通过注册链接注册时遇到了一个问题。如果用户未经身份验证,则无法访问注册表的链接(“showRegistrationForm”) 有人能洞察为什么会发生这种情况吗?我在下面包含了我的安全配置中的代码片段

  • 在Spring中使用基本身份验证时,我遇到了与HTTP响应标头“Access-Control-Allow-Origin”相关的问题。当我手动进行身份验证时,就像下面的代码一样(我使用的是REST): 一切正常,我收到以下HTTP响应: 如您所见,响应中出现了“Access-Control-Allow-Origin”。这里一切都好。我可以在ajax调用中捕捉到401错误。 但是,当身份验证自动执行时

  • 在Spring Security am中,使用DefaultJaasAuthenticationProvider配置进行带有linux用户名/密码的登录身份验证。JpamLoginModule用于身份验证。我成功地进行了身份验证,但我在授权方面有问题(ROLE_USER,ROLE_ADMIN),正在获得HTTP状态403-访问被拒绝错误。 下面是我在spring-security.xml中使用的配

  • 我必须说,我对整个模型非常困惑,我需要帮助把所有的浮动件粘在一起。 我不是在做Spring REST,只是简单的WebMVC控制器。 什么让人困惑?(错误之处请指正) 第三方身份验证 要针对第三方进行身份验证,我需要通过扩展AuthenticationProvider来拥有自定义提供程序 null 问题: 何时调用AbstractAuthenticationProcessingFilter#Suc

  • 我很难让LDAP安全配置与xml配置一起工作。

  • http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-3.0.3.xsd“>