Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Grails config.groovy中的Spring安全内核和捕获事件_Grails_Spring Security - Fatal编程技术网

Grails config.groovy中的Spring安全内核和捕获事件

Grails config.groovy中的Spring安全内核和捕获事件,grails,spring-security,Grails,Spring Security,使用SpringSecurityCore插件,我试图捕捉事件,所以我使用 grails.plugin.springsecurity.useSecurityEventListener = true grails.plugin.springsecurity.onInteractiveAuthenticationSuccessEvent = { e, appCtx -> def request = org.codehaus.groovy.grails.plugins.springs

使用SpringSecurityCore插件,我试图捕捉事件,所以我使用

grails.plugin.springsecurity.useSecurityEventListener = true
grails.plugin.springsecurity.onInteractiveAuthenticationSuccessEvent   = { e, appCtx ->

    def request = org.codehaus.groovy.grails.plugins.springsecurity.SecurityRequestHolder.getRequest()
    def session = request.getSession(false)
    session.myvar=2     
}
但它给了我:

2014-06-08 21:49:05,333 [http-bio-8080-exec-6] ERROR [/ammc].[default]  - Servlet.service() for servlet [default] in context with path [/ammc] threw exception
Message: No signature of method: groovy.util.ConfigObject.getRequest() is applicable for argument types: () values: []
    Line | Method
->>  158 | doCall             in Config$_run_closure5
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
|     95 | call               in grails.plugin.springsecurity.SecurityEventListener
|     72 | onApplicationEvent in     ''
|     49 | doFilter           in grails.plugin.springsecurity.web.authentication.RequestHolderAuthenticationFilter
|     82 | doFilter . . . . . in grails.plugin.springsecurity.web.authentication.logout.MutableLogoutFilter
|   1145 | runWorker          in java.util.concurrent.ThreadPoolExecutor
|    615 | run . . . . . . .  in java.util.concurrent.ThreadPoolExecutor$Worker
^    745 | run                in java.lang.Thread
请注意,配置文件中的第158行正是这一行

def request = org.codehaus.groovy.grails.plugins.springsecurity.SecurityRequestHolder.getRequest()
这很疯狂,因为我没有在这一行中调用groovy.util.ConfigObject.getRequest()

我已经尝试过清理和编译,但没有任何改变

同时,如果我想捕获失败登录事件,我必须捕获什么事件

更新

我使用grails 2.3.8和spring security core:2.0-RC2来回答这个问题 这可能很晚了,但是。。。 我相信你的意思是

def request = grails.plugin.springsecurity.web.SecurityRequestHolder.getRequest()
(注意不同的包名)

这可能对@Bilel没有多大帮助,但可能对其他遇到这个问题的人有帮助

一个旁注: 这很疯狂,因为我没有在这一行中调用groovy.util.ConfigObject.getRequest()

当您看到像
groovy.util.ConfigObject
这样的奇怪事情时,我注意到它通常意味着配置中不存在变量

此外,另一方面: 我不知道在Config.groovy中这样做是否是一个绝对的要求,但我相信如果您注册一个侦听器,这会变得更干净

下面是我要做的:

import org.springframework.context.ApplicationListener
import org.springframework.security.authentication.event. InteractiveAuthenticationSuccessEvent

class MyLoginListener implements ApplicationListener<InteractiveAuthenticationSuccessEvent> {
    void onApplicationEvent(InteractiveAuthenticationSuccessEvent event) {
        def request = grails.plugin.springsecurity.web.SecurityRequestHolder.getRequest()
        def session = request.getSession(false)
        session.myvar=2
    }
}
您需要在
Config.groovy
中使用以下行,但您可能已经在那里使用了它

grails.plugin.springsecurity.useSecurityEventListener = true

Grails和Spring安全核心插件的哪个版本?我用这些版本更新了原始帖子
grails.plugin.springsecurity.useSecurityEventListener = true