在 grails 中使用 spring-security 插件时出错

Posted

技术标签:

【中文标题】在 grails 中使用 spring-security 插件时出错【英文标题】:Error using spring-security plugin in grails 【发布时间】:2014-01-02 22:26:05 【问题描述】:

我一直在尝试将 spring-security 集成到我的一个 grails 应用程序中。正如spring security教程中提到的,我使用以下代码安装了插件

BuildConfig.groovy: 我添加了以下代码

repositories 
mavenRepo 'http://repo.spring.io/milestone'


plugins 
compile ':spring-security-core:2.0-RC2'

后来我清理了代码并编译它以确保下载了依赖项。我还检查了 .grails 文件夹以确保下载了依赖项。

接下来我创建了 User 和 Role 类。 (注意:我将这些类分别命名为 Person 和 Authority)。

在此之后我创建了 SecureController 并且没有添加任何安全访问注释,但我仍然无法访问安全控制器。控件直接重定向到登录控制器

问题 1: 是不是在使用spring security插件后,每个页面都需要认证。有没有办法不用登录就可以访问页面

接下来我将@Secured 注解添加到 SecureController。尽管 @Secured 注释存在于项目的插件文件夹中,但它根本没有被检测到。最初我以为我错过了一些东西,所以我从开始实施相同的步骤再次创建了项目。但是这次插件被检测到了

问题 2: 为什么 spring-security 插件的行为如此不一致

我尝试在不登录的情况下访问 SecureController,我收到以下错误。

EL1008E:(pos 0):在“org.springframework.security.web.access.expression.WebSecurityExpressionRoot”类型的对象上找不到字段或属性“ADMIN_ROLE”

登录并尝试访问控制器后,我也遇到了同样的错误。

问题 3: 是不是我遗漏了需要指定的依赖。

在登录页面中,表单会导致一些操作“j_security_check”。我在任何控制器中都没有注意到这个动作。

问题 4: 我是否需要为这个名称创建一个新操作

请帮我解决这个问题。非常感谢您的帮助。

【问题讨论】:

每个问题一个问题:) 嗨,Burt,您能告诉我为什么会收到 WebSecurityExpressionRoot 错误。 @Rammohan 这是另一个问题(请打开新问题),您需要提供日志信息,我们才能为您提供帮助。 【参考方案1】:

安装插件后,您需要运行s2-quickstart 以获取基本配置。

如果要重命名默认类,需要在 Config.groovy 文件中指定给 Spring Security:

grails.plugins.springsecurity.userLookup.userDomainClassName = 'sys.Usuario'
grails.plugins.springsecurity.userLookup.authorityJoinClassName = 'sys.UsuarioRol'
grails.plugins.springsecurity.authority.className = 'sys.Rol'
// This last two lines if you're using Requestmap Instances method for protect your resources
grails.plugins.springsecurity.requestMap.className = 'sys.Requestmap'
grails.plugins.springsecurity.securityConfigType = 'Requestmap'

下面一行,如果不存在该资源的规则,则拒绝所有请求。

grails.plugins.springsecurity.rejectIfNoRule = true

正如您在documentation 中看到的那样。您有 4 种不同的形式来保护您的资源。

    安全注释 Config.groovy 中的简单映射 存储在数据库中的 Requestmap 实例 使用表达式创建描述性的细粒度规则

我同意 Burth 的观点,请每个问题一个问题。

【讨论】:

以上是关于在 grails 中使用 spring-security 插件时出错的主要内容,如果未能解决你的问题,请参考以下文章

Grails Spring-Security - 如何比较密码-

Spring-security/Grails 应用程序 - 未调用自定义 WebSecurity 配置

休息资源的 Grails spring-security 静态规则似乎无法正常工作

grails spring-security 插件保护所有控制器,而不仅仅是带有@Secured注解的控制器

Spring-security 记住我的功能不起作用

在 Grails 中使用自己的方法扩展 SpEL?