【问题标题】:Grails Spring Security UI, user and Role management accessGrails Spring Security UI、用户和​​角色管理访问
【发布时间】:2013-12-08 00:10:21
【问题描述】:

我已经安装了 spring-security-core 和 spring-security-ui。还在 roleadmin 中添加了 testuser。

当我运行应用程序时,我得到所有控制器列表,登录控制器使用用户名和密码。但是当点击其他控制器时,它会说

'抱歉,您无权查看此页面。'

我是否需要添加任何其他角色才能获得用户和角色管理 UI 访问权限?

插件版本。

编译':spring-security-core:2.0-RC2' 编译“:spring-security-ui:1.0-RC1”

访问此网址: //127.0.0.1:8080/sec-test/role/search

这是我登录后的屏幕。

【问题讨论】:

  • 您是否尝试将@Secured(['ROLE_USER']) def index = {} 放在控制器中的每个方法之前
  • 是的,我在我的应用程序控制器中添加了它,它可以工作。如何访问安全插件用户角色管理控制器?
  • 据我所知没有角色管理控制器
  • 嗨,我正在尝试使用 Spring security ui。有什么入门教程吗?

标签: grails spring-security


【解决方案1】:

如上所述,插件更改为悲观锁定,因此任何未定义安全级别的东西都会抛出“抱歉,您无权查看此页面。”消息。

其他答案已经说过您可以使用 s2ui-override 脚本来生成所有控制器并添加 @Secure 注释

grails s2ui-override user com.myApp
grails s2ui-override role com.myApp

然后编辑添加

import grails.plugin.springsecurity.annotation.Secured
@Secured(['ROLE_ADMIN'])
class UserController ...

但是不用创建一堆空的控制器,你可以只修改 Config.groovy 中的静态规则文件。

grails.plugin.springsecurity.controllerAnnotations.staticRules = [
    '/':                              ['permitAll'],
    '/**/css/**':                     ['permitAll'],
    '/**/images/**':                  ['permitAll'],
    <snip>
    '/register/**':                   ['permitAll'],
    '/user/**':                       ['ROLE_ADMIN'],
    '/role/**':                       ['ROLE_ADMIN'],

添加这三行将使注册控制器可供任何人使用,而用户和角色控制器只能由 ROLE_ADMIN 用户访问。

【讨论】:

    【解决方案2】:

    默认情况下,grails 对 url 锁定使用悲观方法,这意味着如果该 url 未明确列入白名单,它会显示相同的消息“抱歉,您无权查看此 URL”。除了将 @Secured 添加到您的控制器之外,您还可以将以下内容添加到您的 config/conf.groovy 文件并将 URL 列入白名单:

    '/action':                    ['ROLE_ADMIN']
    
    '/action' =
    

    您的操作的网址。也可以与通配符一起使用,例如:

    '/**/css/**':                 ['permitAll']
    
    ['ROLE_ADMIN'] =
    

    可以访问url的角色

    【讨论】:

      【解决方案3】:

      更好的方法是通过这些说明进行匿名注册:

      grails s2ui-override auth、grails s2ui-override layout、grails s2ui-override user com.myApp、grails s2ui-override role com.myApp、grails s2ui-override register com.myApp

      并将其添加到注册控制器:

      import grails.plugin.springsecurity.annotation.Secured
      
      @Secured(['ROLE_ANONYMOUS'])
      class RegisterController extends      grails.plugin.springsecurity.ui.RegisterController {
      }
      

      【讨论】:

        【解决方案4】:

        在 config.groovy

        grails.plugin.springsecurity.controllerAnnotations.staticRules = [
        '/':                              ['permitAll'],
        '/**':                              ['permitAll'],
        '/index':                         ['permitAll'],
        '/user/search':                   ['permitAll'],
        '/plugins/jquery-ui-1.10.3/**':   ['permitAll'],
        '/index.gsp':                     ['permitAll'],
        '/assets/**':                     ['permitAll'],
        '/**/js/**':                      ['permitAll'],
        '/**/css/**':                     ['permitAll'],
        '/**/images/**':                  ['permitAll'],
        '/**/favicon.ico':                ['permitAll']
        

        这允许授予对所有这些的访问权限。您也可以手动配置它。

        【讨论】:

          【解决方案5】:

          首先在 BootStrap.groovy 中创建你的角色和测试用户:

          import springsecurity.User
          import springsecurity.Role
          import springsecurity.UserRole
          
          class BootStrap {
          
              def init = { servletContext ->
          
                  def adminRole = new Role(authority: 'ROLE_ADMIN').save(flush: true)
                  def userRole = new Role(authority: 'ROLE_USER').save(flush: true)
          
                  def testUser = new User(username: 'testusername', password: '1234')
                  testUser.save(flush: true)
          
                  UserRole.create testUser, adminRole, true
          
                  assert User.count() == 1
                  assert Role.count() == 2
                  assert UserRole.count() == 1
          
              }
              def destroy = {
              }
          }
          

          然后按照建议覆盖:

          grails s2ui-override auth
          grails s2ui-override layout
          grails s2ui-override user package.name
          grails s2ui-override role package.name
          

          最后将安全注释添加到您的控制器中,即:

          package springsecurity
          import grails.plugin.springsecurity.annotation.Secured
          
          @Secured(['ROLE_ADMIN'])
          class RoleController extends grails.plugin.springsecurity.ui.RoleController {
          }
          

          【讨论】:

          • 嗨@burt-beckwith,我已将Spring security core、acl和ui升级到最新版本,但现在如果我尝试登录,我会收到抱歉,您无权查看此页面。当我从 spring security core 1.2、ui 0.2 和 acl 1.1.1 版本升级时,我们是否需要做任何特别的事情。
          • 嗨@sfgroups,上述解决方案是否解决了您的问题?我遇到了同样的错误,我尝试了上述解决方案但无法成功。
          【解决方案6】:

          安装插件后,我需要运行此 s2ui-override 以在应用程序中创建控制器

          grails s2ui-override auth
          grails s2ui-override layout
          grails s2ui-override user com.myApp
          grails s2ui-override role com.myApp
          

          此页面的帮助已满。

          http://ajibrans.wordpress.com/2012/02/04/spring-security-plugin-with-grails-1-3-7/

          【讨论】:

            【解决方案7】:

            用户角色映射在 UserController 中完成。

            URL - http://127.0.0.1:8080/sec-test/user
            

            【讨论】:

            • 我不知道我必须为应用程序创建用户和角色控制器。谢谢
            • 您不必创建它们。这些控制器由 spring security UI 插件提供。
            • 如果不创建这些,我们如何授予 ROLE_ADMIN 组访问权限?
            猜你喜欢
            • 2019-09-15
            • 2011-11-04
            • 2016-05-20
            • 2013-08-26
            • 2012-08-16
            • 2018-07-06
            • 2019-08-08
            • 2012-02-01
            • 1970-01-01
            相关资源
            最近更新 更多