标签: grails3

spring-security-rest和guava之间的间接jar冲突导致NoSuchMethod错误

我用grails 3.1.16

的build.gradle:

dependencies {
    compile "com.google.guava:guava:18.0"
    compile "org.grails.plugins:spring-security-rest:2.0.0.M2"
}
Run Code Online (Sandbox Code Playgroud)

在运行此代码时:

   private LoadingCache<String, Boolean> attempts

    @PostConstruct
    void init() {
        Integer time = ApplicationContextHolder.getProperty(ApplicationContextHolder.config.time)
        attempts = CacheBuilder.newBuilder()
                .expireAfterWrite(time, TimeUnit.MINUTES)
                .build({ 0 } as CacheLoader)
    }
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

Caused by: java.lang.NoSuchMethodError: com.google.common.base.Platform.systemNanoTime()J
        at com.google.common.base.LocalCache(Ticker.java:60)
        at com.google.common.cache.LocalCache$Segment.put(LocalCache.java:2827)
        at com.google.common.cache.LocalCache.put(LocalCache.java:4149)
        at com.google.common.cache.LocalCache$LocalManualCache.put(LocalCache.java:4754)
        at com.google.common.cache.Cache$put.call(Unknown Source)
Run Code Online (Sandbox Code Playgroud)

在运行依赖项报告之后,我发现问题是由Spring Security REST插件的依赖引起的:(com.google.guava:guava-base:r03) - 使用相同的包名"com.google.common. base"和Platform.class没有这样的方法systemNanoTime()

|    +--- org.grails.plugins:spring-security-rest:2.0.0.M2
|    |    +--- com.google.guava:guava-io:r03
|    |    |    +--- com.google.guava:guava-annotations:r03
|    |    |    \--- com.google.guava:guava-base:r03
|    |    |         \--- com.google.guava:guava-annotations:r03
Run Code Online (Sandbox Code Playgroud)

任何解决这个问题的想法?

grails guava google-guava-cache grails-3.1 grails3

9
推荐指数
2
解决办法
291
查看次数

springSecurityService.principal在tomcat 8.5中作为WAR部署时返回Null

前言

我正在为Grails微服务联合设计一个API网关.此问题似乎与此存储库中已提交的一系列问题有关,但没有提供解决方案.

版本和配置

Grails:3.2.2

Tomcat:8.5

插件版本:

compile 'org.grails.plugins:spring-security-core:3.1.2'
compile "org.grails.plugins:spring-security-rest:2.0.0.M2"
Run Code Online (Sandbox Code Playgroud)

我正在使用spring security rest插件进行令牌身份验证.我正在通过返回ROLE_NO_ROLES所有用户来自己做授权部分getAuthorities().我拦截所有请求并根据我自己在DB中存储的授权模式授权访问.

问题:

通过这些配置和策略,当我在本地系统上运行时,我的代码可以正常工作.当我在服务器上将其作为war文件在tomcat中部署时,它适用于所有对网关的请求,即对模式的所有请求/umm/controller/action.Spring安全上下文就在那里,用户得到了完美的评估.

当我尝试通过重定向与表单的请求调用其他微服务/umm/microservice/controller/action,springSecurityService.getCurrentUser()springSecurityService?.principal?.username开始返回null.虽然我的令牌得到了完美的评估,但我没有得到任何安全上下文.

有关详细信息,请查看此问题.上述问题中还提供了复制错误的详细信息.整个项目在这里可用.

更新:2017年5月19日

我尝试在我的本地机器上的Tomcat中部署我的战争.这个问题和这个问题提供了以下解决方案

  • 禁用tomcat缓存
  • 设置 grails.plugin.springsecurity.sch.strategyName = org.springframework.security.core.context.SecurityContextHolder.MODE_INHERITABLETHREADLOCAL

到目前为止似乎没有任何工作.无论如何都要SecurityContextHolder回来null了.所有用户检索的功能SpringSecurityService.getCurrentUser(),getPrincipal(),getAuthentication()loadCurrentUser()返回null.

更新:2017年5月23日

为了缩小问题范围,我使用了执行独立战争

java -Dgrails.env=prod -jar build/libs/mywar-0.1.war
Run Code Online (Sandbox Code Playgroud)

现在对于任何非umm请求,我得到一个404, page not found.我认为问题在于生产环境.该应用程序在开发中完全正常.

也试过grails run-app哪个工作正常.为了排除生产环境的问题,我使用grails …

spring-security tomcat8 spring-security-rest grails3

7
推荐指数
1
解决办法
442
查看次数

Grails自我引用标准

在我正在工作的项目中,数据库的一部分如下图所示

数据库部分

域类具有类似于以下的定义:

class File{
    String name
}

class Document{
    File file
}

class LogEntry{
    Document document
    Date date
}
Run Code Online (Sandbox Code Playgroud)

首先,我需要获取所有文档的最新LogEntry; 在SQL中我执行以下操作(SQL_1):

SELECT t1.* FROM log_entry AS t1 
LEFT OUTER JOIN log_entry t2 
on t1.document_id = t2.document_id AND t1.date < t2.date 
WHERE t2.date IS NULL
Run Code Online (Sandbox Code Playgroud)

然后在我的服务中我有这样的功能:

List<LogEntry> logs(){
    LogEntry.withSession {Session session ->
        def query =  session.createSQLQuery(
                """SELECT t1.* FROM log_entry AS t1 
                    LEFT OUTER JOIN log_entry t2 
                    on t1.document_id = t2.document_id AND t1.date < t2.date 
                    WHERE t2.date IS NULL"""
        )
        def …
Run Code Online (Sandbox Code Playgroud)

self-join grails-orm grails3

6
推荐指数
0
解决办法
138
查看次数

部署Grails 3 App会引发FlashScope异常

将新版本的Grails 3.1.1应用程序战争部署到正在运行的Tomcat时,在部署后访问它时会出现异常.

Oct 13, 2016 11:39:58 AM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet [grailsDispatcherServlet] in context with path [/acses] threw exception
java.lang.ClassCastException: org.grails.web.servlet.GrailsFlashScope cannot be cast to grails.web.mvc.FlashScope
        at org.grails.web.servlet.DefaultGrailsApplicationAttributes.getFlashScope(DefaultGrailsApplicationAttributes.java:173)
        at org.grails.web.servlet.mvc.GrailsWebRequestFilter.doFilterInternal(GrailsWebRequestFilter.java:68)
        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:101)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:101)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:101)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:101)
        at org.springframework.boot.context.web.ErrorPageFilter.doFilter(ErrorPageFilter.java:113)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
        at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:748)
        at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:486)
        at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:411)
        at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:338)
        at org.springframework.boot.context.web.ErrorPageFilter.forwardToErrorPage(ErrorPageFilter.java:188)
        at org.springframework.boot.context.web.ErrorPageFilter.handleException(ErrorPageFilter.java:171)
        at org.springframework.boot.context.web.ErrorPageFilter.doFilter(ErrorPageFilter.java:135)
        at org.springframework.boot.context.web.ErrorPageFilter.access$000(ErrorPageFilter.java:61) …
Run Code Online (Sandbox Code Playgroud)

grails flash-scope grails3

5
推荐指数
0
解决办法
89
查看次数

Grails 3.2.4 grails-spring-websocket 2.3错误

===更新===(见下面的原帖)

虽然由zyro发起的错误修复带来了一些改进,但是错误仍然没有完全消失.它仍然看起来像这样:

31-Jan-2018 19:30:53.529 INFO [MessageBroker-3] org.apache.coyote.AbstractProcessor.setErrorState An error occurred in processing while o
n a non-container thread. The connection will be closed immediately
 java.io.IOException: APR error: -32
        at org.apache.coyote.http11.InternalAprOutputBuffer.writeToSocket(InternalAprOutputBuffer.java:291)
        at org.apache.coyote.http11.InternalAprOutputBuffer.writeToSocket(InternalAprOutputBuffer.java:244)
        at org.apache.coyote.http11.InternalAprOutputBuffer.flushBuffer(InternalAprOutputBuffer.java:213)
        at org.apache.coyote.http11.AbstractOutputBuffer.flush(AbstractOutputBuffer.java:305)
        at org.apache.coyote.http11.AbstractHttp11Processor.action(AbstractHttp11Processor.java:765)
        at org.apache.coyote.Response.action(Response.java:177)
        at org.apache.catalina.connector.OutputBuffer.doFlush(OutputBuffer.java:349)
        at org.apache.catalina.connector.OutputBuffer.flush(OutputBuffer.java:317)
        at org.apache.catalina.connector.Response.flushBuffer(Response.java:510)
        at org.apache.catalina.connector.ResponseFacade.flushBuffer(ResponseFacade.java:318)
        at javax.servlet.ServletResponseWrapper.flushBuffer(ServletResponseWrapper.java:176)
        at org.springframework.boot.web.support.ErrorPageFilter$ErrorWrapperResponse.flushBuffer(ErrorPageFilter.java:318)
        at javax.servlet.ServletResponseWrapper.flushBuffer(ServletResponseWrapper.java:176)
        at javax.servlet.ServletResponseWrapper.flushBuffer(ServletResponseWrapper.java:176)
        at javax.servlet.ServletResponseWrapper.flushBuffer(ServletResponseWrapper.java:176)
        at org.springframework.security.web.util.OnCommittedResponseWrapper.flushBuffer(OnCommittedResponseWrapper.java:159)
        at org.springframework.http.server.ServletServerHttpResponse.flush(ServletServerHttpResponse.java:96)
        at org.springframework.web.socket.sockjs.transport.session.AbstractHttpSockJsSession.writeFrameInternal(AbstractHttpSockJsSession
.java:350)
        at org.springframework.web.socket.sockjs.transport.session.AbstractSockJsSession.writeFrame(AbstractSockJsSession.java:318)
        at org.springframework.web.socket.sockjs.transport.session.AbstractSockJsSession.sendHeartbeat(AbstractSockJsSession.java:251)
        at org.springframework.web.socket.sockjs.transport.session.AbstractSockJsSession$HeartbeatTask.run(AbstractSockJsSession.java:455
)
        at org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:54)
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180) …
Run Code Online (Sandbox Code Playgroud)

grails spring tomcat8 spring-websocket grails3

5
推荐指数
0
解决办法
378
查看次数

如何在 Grails 3 中设置 Oracle 连接属性“includeSynonyms=true”

我的 Grails 3.3.2 应用程序当前连接到 Oracle 11g 数据库,其中一些数据表是 dblink 的同义词,指向另一个数据库中的物理表。当 Grails 应用程序启动时,抛出以下 hibernate 异常:

org.hibernate.tool.schema.spi.SchemaManagementException:架构验证:表 [tbl_with_synonyms] 中缺少列 [col_in_tbl_with_synonyms]

很多文章都说includeSynonyms必须设置connection属性true才能让Oracle返回元数据,这样hibernate才能找到列定义。所以我尝试以includeSynonyms=true不同的方式设置,但仍然无法正常工作并且总是出现上述错误,无论我使用的是 ojdbc6 还是 ojbc8 驱动程序。

我知道我可以设置dbCreate: none绕过验证作为解决方法,但是通过验证可以更早地找出映射问题,这应该是一个好主意。

以下是我的配置供参考,有什么想法吗?谢谢!

构建.gradle

bootRun { jvmArgs = ['-Doracle.jdbc.includeSynonyms=true'] }

应用程序.yml

spring: ... datasource: dbProperties: includeSynonyms: true synonyms: true connectionProperties: includeSynonyms: true synonyms: true connection-properties: includeSynonyms: true synonyms: true hibernate: ... synonyms: true includeSynonyms: true dataSources: dataSource: driverClassName: oracle.jdbc.OracleDriver dialect: org.hibernate.dialect.Oracle10gDialect dbCreate: validate dbProperties: includeSynonyms: true synonyms: true connectionProperties: includeSynonyms: …

oracle grails grails3

5
推荐指数
0
解决办法
730
查看次数

grails单元测试中trait提供的覆盖方法

我有一个控制器,它使用 Grails Spring Security Core 插件提供的 isLoggedIn() 函数进行操作。我希望能够对这些操作进行单元测试,因此我需要一种方法来模拟 isLoggedIn() 函数,以便它始终返回 false。这种方法是由 trait 提供的,我认为这是我的问题的根源。

我已经尝试向元类添加一个新函数:

UserController.metaClass.isLoggedIn = { -> false}
Run Code Online (Sandbox Code Playgroud)

然而,这似乎不起作用;原始方法仍在被调用。

关于如何实现这一点的任何建议?

grails groovy unit-testing spring-security grails3

4
推荐指数
1
解决办法
511
查看次数

grails 3.3.0:org.h2.jdbc.JdbcSQLException:在单元测试中找不到表“XYZ”

概括

我正在尝试创建一个新的 grails 3.3.0 应用程序,其中包含一些简单的域类。

我还使用新的 HibernateSpec(GORM 6.1.x 附带)为我的单元测试创​​建内存中 H2 数据库。

我在以前版本的 grails 中使用了这种技术,但现在在 grails 3.3.0 中我遇到了系统故障。

Hibernate 似乎创建了这些表,但是当我尝试在单元测试中执行查询时,它抱怨找不到该表。

细节

这是我的数据源配置(在 application.groovy 中):

dataSource {
    pooled = true
    jmxExport = true
    driverClassName = "org.h2.Driver"
    username = "sa"
    password = ""
    logSql = true
}


environments {
    development {
        dataSource {
            dbCreate = "create-drop" // one of 'create', 'create-drop', 'update', 'validate', ''
            url = "jdbc:h2:mem:devDb;MVCC=TRUE;LOCK_TIMEOUT=10000;DB_CLOSE_ON_EXIT=FALSE;DATABASE_TO_UPPER=false"
        }
    }
    test {
        dataSource {
            dbCreate = "create-drop" // one of 'create', 'create-drop', 'update', 'validate', …
Run Code Online (Sandbox Code Playgroud)

unit-testing hibernate grails3

4
推荐指数
1
解决办法
1704
查看次数

Grails 3 JSON 渲染无法渲染列表?

渲染列表结果时出现问题,grails 无法渲染列表吗?这是我的代码

def findSome(){
    String query = params?.some
    List<Some> someList = Some.createCriteria().list(max : 5) {
        if(query != null && query != ""){
            and {
                like("name", query)
            }
        }

        order("name", "asc")
    }
    someList = someList == null ? new ArrayList<Some>() : someList

    ->> render someList as JSON
}
Run Code Online (Sandbox Code Playgroud)

我的代码有问题吗?我记得的是,grails 可以渲染对象列表。但是使用此代码,始终按照 mark 返回 null ->>

grails groovy json grails3

4
推荐指数
1
解决办法
1126
查看次数

Grails 3 + IntelliJ:运行集成测试会产生"未配置GORM实现.确保GORM已正确初始化"

我有一个简单的Grails 3.3.2应用程序.我可以运行测试gradle test integrationTest.但是当我尝试在IntelliJ中右键单击并运行测试类或单个测试或整个测试套件时,我得到:

未配置GORM实施.确保GORM已正确初始化

当我将它们作为jUnit测试运行时会发生这种情况.

如果我尝试运行Grails测试,我得到:

没有给出包括的测试

我试图在IntelliJ中清理构建和重置缓存,但似乎没有任何帮助.不幸的是,我不知道我把Grails + IntelliJ放在这种状态下做了什么.它曾经工作,但现在它没有,我不知道发生了什么变化.

grails intellij-idea grails3

4
推荐指数
1
解决办法
1693
查看次数