spring - Spring Security Core Grails插件问题

标签 spring grails spring-security grails-plugin

我刚刚阅读了spring安全核心grails插件的基本信息,并将其安装在我的grail项目中:

grails install-plugin spring-security-core

之后,我使用了插件提供的s2-quickstart:
grails s2-quickstart com.springsecurity SpringUser SpringRole

因此,基本上,它已经为我创建了所需的登录和注销 Controller ,域 Controller 以及一些 View / gsp文件。

现在出于测试目的,我需要测试其中一个 Controller ,因此我创建了一个名为Secure的示例 Controller ,其代码如下:
package com.springsecurity;
import grails.plugins.springsecurity.Secured;

class SecureController {
    @Secured(['ROLE_ADMIN'])
    def index = {
        render 'Secure access only'
    }
}

现在,从文档中,我找到了一个步骤,该步骤向我展示了如何创建默认用户以及它是Bootstrap.groovy的角色。因此,我在Bootstrap.groovy中编写了以下代码:
def adminRole = new SpringRole(authority: 'ROLE_ADMIN').save(flush: false)
def userRole = new SpringRole(authority: 'ROLE_USER').save(flush: false)
String password = springSecurityService.encodePassword('password')
def testUser = new SpringUser(username: 'me', enabled: true, password: password)
testUser.save(flush: false)
SpringUserSpringRole.create testUser, adminRole, true
assert SpringUser.count() == 1
assert SpringRole.count() == 2
assert SpringUserSpringRole.count() == 1

我想在这里知道的一件事是,我尚未在后端中创建任何表。那么,是否需要在此步骤中进行操作,否则上述代码将在 session 中存储单个用户?

通过上面的代码,我在运行项目时遇到以下异常:
2010-11-11 11:42:47,932 [main] ERROR context.GrailsContextLoader  - Error executing bootstraps: getFlushMode is not valid without active transaction
org.hibernate.HibernateException: getFlushMode is not valid without active transaction
        at $Proxy16.getFlushMode(Unknown Source)
        at BootStrap$_closure1.doCall(BootStrap.groovy:29)
        at grails.util.Environment.evaluateEnvironmentSpecificBlock(Environment.java:251)
        at grails.util.Environment.executeForEnvironment(Environment.java:244)
        at grails.util.Environment.executeForCurrentEnvironment(Environment.java:220)
        at org.grails.tomcat.TomcatServer.start(TomcatServer.groovy:164)
        at grails.web.container.EmbeddableServer$start.call(Unknown Source)
        at _GrailsRun_groovy$_run_closure5_closure12.doCall(_GrailsRun_groovy:158)
        at _GrailsRun_groovy$_run_closure5_closure12.doCall(_GrailsRun_groovy)
        at _GrailsSettings_groovy$_run_closure10.doCall(_GrailsSettings_groovy:280)
        at _GrailsSettings_groovy$_run_closure10.call(_GrailsSettings_groovy)
        at _GrailsRun_groovy$_run_closure5.doCall(_GrailsRun_groovy:149)
        at _GrailsRun_groovy$_run_closure5.call(_GrailsRun_groovy)
        at _GrailsRun_groovy.runInline(_GrailsRun_groovy:116)
        at _GrailsRun_groovy.this$4$runInline(_GrailsRun_groovy)
        at _GrailsRun_groovy$_run_closure1.doCall(_GrailsRun_groovy:59)
        at RunApp$_run_closure1.doCall(RunApp.groovy:33)
        at gant.Gant$_dispatch_closure5.doCall(Gant.groovy:381)
        at gant.Gant$_dispatch_closure7.doCall(Gant.groovy:415)
        at gant.Gant$_dispatch_closure7.doCall(Gant.groovy)
        at gant.Gant.withBuildListeners(Gant.groovy:427)
        at gant.Gant.this$2$withBuildListeners(Gant.groovy)
        at gant.Gant$this$2$withBuildListeners.callCurrent(Unknown Source)
        at gant.Gant.dispatch(Gant.groovy:415)
        at gant.Gant.this$2$dispatch(Gant.groovy)
        at gant.Gant.invokeMethod(Gant.groovy)
        at gant.Gant.executeTargets(Gant.groovy:590)
        at gant.Gant.executeTargets(Gant.groovy:589)
Application context shutting down...
Application context shutdown.

看到上述错误后,我感到它实际上是在尝试将指定的对象(在Bootstrap.groovy中)存储到数据库,并且没有表,因此抛出了一些异常。

任何帮助将不胜感激...

提前致谢..

最佳答案

错误消息是“getFlushMode在没有 Activity 事务的情况下无效”,这与是否有表无关。

如果您在DataSource.groovy中使用dbCreate = create-drop或dbCreate = update,则将为您创建域类的所有表。如果禁用了dbCreate,则需要创建关联的表,但是每当将一个或多个域类添加到Grails应用程序时,这都是必需的。

查看Grails用户邮件列表,看起来这是一个jar文件冲突,与您添加到lib目录中的某个文件或另一个插件所添加的某个文件有关。一名用户在看到此错误时发现Drools 4.0是问题。您是否有包含Hibernate jar或其他Hibernate依赖的库的插件,例如Antlr?

关于spring - Spring Security Core Grails插件问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4151989/

相关文章:

java - 如何对使用存储库的服务层进行 Spring 单元测试?

java - 使用 spring data jpa 条件加载关系

java - 使用 Spring MVC 管理 REST 响应

sorting - Grails:多个嵌套关系的分离标准

java - Java EE Controller 上的Spring安全认证

java - GAE 消息服务

intellij-idea - 带有@GrailsCompileStatic 注解的Grails GORM 类在静态映射闭包表、版本、autoTimestamp 中显示为未解析符号

json - 如何在不定义内部模板的情况下使用Grails JSON View ?

Spring Test Junit 5 & Security boot 2.2 如何模拟认证?

spring-boot - 无法解析 Spring Boot 版本 2.0.6 中的 WebSecurityConfigurerAdapter 类