我在SpringSecurity中使用Grails 1.3.7 alogn,并且需要在用户会话到期时执行一些处理。
所以我在src / groovy中定义了一个实现HttpSessionListener并覆盖sessionDestroyed方法的类。侦听器类在web.xml中定义为“侦听器”。
我在监听器中添加了一个'def springSecurityService',我希望它会自动注入服务,但似乎并非如此。
所以我想知道为了进行注入还需要做些什么,我是否必须以某种方式在resources.groovy中声明监听器类?
谢谢,
戴夫
答案 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/
的更多信息希望有帮助