Grails Spring Security UI、用户和​​角色管理访问

Posted

技术标签:

【中文标题】Grails Spring Security UI、用户和​​角色管理访问【英文标题】:Grails Spring Security UI, user and Role management access 【发布时间】: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。有什么入门教程吗? 【参考方案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 authgrails s2ui-override layoutgrails s2ui-override user com.myAppgrails s2ui-override role com.myAppgrails 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 组访问权限?

以上是关于Grails Spring Security UI、用户和​​角色管理访问的主要内容,如果未能解决你的问题,请参考以下文章

在 spring security UI grails 插件中添加更多属性

Grails Spring Security UI、用户和​​角色管理访问

grails spring-security-ui 插件重定向回应用程序

grails spring security ui登录有时会出现奇怪的重定向

Grails/Spring Security:无法使用新创建的用户登录

grails spring security ui在用户域类上没有电子邮件字段