如何将springSecurityService注入自定义侦听器

时间:2011-12-30 10:47:20

标签: grails dependency-injection spring-security

我在SpringSecurity中使用Grails 1.3.7 alogn,并且需要在用户会话到期时执行一些处理。

所以我在src / groovy中定义了一个实现HttpSessionListener并覆盖sessionDestroyed方法的类。侦听器类在web.xml中定义为“侦听器”。

我在监听器中添加了一个'def springSecurityService',我希望它会自动注入服务,但似乎并非如此。

所以我想知道为了进行注入还需要做些什么,我是否必须以某种方式在resources.groovy中声明监听器类?

谢谢,

戴夫

2 个答案:

答案 0 :(得分:3)

监听器由servlet容器实例化,因此不在Spring的范围之内。但是,您可以通过servletcontext(在会话对象中可用)访问应用程序上下文。这样的事情可以为您提供服务:

在2.0.0中,您可以使用:

public void sessionDestroyed(HttpSessionEvent se) {
    ServletContext context = se.getSession().getServletContext();
    GrailsApplication application = GrailsWebUtil.lookupApplication(context);
    application.getMainContext().getBean("springSecurityService");
}

在以前的版本中, GrailsWebUtil.lookupApplication()不可用,但您可以使用 org.codehaus.groovy.grails.commons.ApplicationHolder.getApplication()代替

答案 1 :(得分:0)

在2.0及更高版本中,您可以使用插件spring-security-core:2.0-RC4

BuildConfig.groovy中的安装编译':spring-security-core:2.0-RC4'

Class MyController {
static allowedMethods = [save: "POST", update: "PUT", delete: "DELETE"]

    def springSecurityService
    def index(Integer max) {
        params.max = Math.min(max ?: 10, 100)
        def user = (User)springSecurityService.currentUser
        respond User.list(params), model: [userInstanceCount: User.count() ]
    }
}  

http://grails-plugins.github.io/grails-spring-security-core/

的更多信息

希望有帮助