Grails config.groovy中的Spring安全内核和捕获事件
使用SpringSecurityCore插件,我试图捕捉事件,所以我使用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
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