Grails 访问';会议';从过滤器
我正在使用Grails2.5.x,并向spring security添加了一些Grails 访问';会议';从过滤器,grails,spring-security,Grails,Spring Security,我正在使用Grails2.5.x,并向spring security添加了一些预验证 我试图将请求参数传递到一个预授权包中,所以我创建了一个过滤器。下面是课程: class PreAuthenticationRequestParametersFilter extends AbstractPreAuthenticatedProcessingFilter { 以下是引导程序: def init = { servletContext -> // injects request data
预验证
我试图将请求参数传递到一个预授权包中,所以我创建了一个过滤器。下面是课程:
class PreAuthenticationRequestParametersFilter extends AbstractPreAuthenticatedProcessingFilter {
以下是引导程序:
def init = { servletContext ->
// injects request data for SAML login
SpringSecurityUtils.clientRegisterFilter('preAuthRequestFilter', SecurityFilterPosition.PRE_AUTH_FILTER)
}
最后,这里是我的bean配置,来自resources.groovy
:
preAuthRequestFilter(PreAuthenticationRequestParametersFilter) {
authenticationManager = ref("authenticationManager")
}
我想从过滤器中查找一些数据库。然而,当我尝试使用我的DAO(Hibernate)方法时,它会呕吐
我尝试将“session=ref(“session”)
”添加到resources.groovy中的过滤器中。未能编译
有没有办法在这个级别访问我的会话/DAO?这是Hibernate会话,而不是HTTP会话。Grails使用OpenSessionInView模式,在该模式中,它打开一个Hibernate会话并保持它在请求完成之前可用,但Spring Security在Grails之前运行(以防它需要阻止访问),因此还没有自动注册会话
最简单的解决方法是将代码包装在withTransaction
块中。无论如何,如果您要向数据库写入数据,这是一个好主意,但也可以避免您看到的问题,并允许延迟加载工作。您在其上调用的withTransaction
域类没有影响,因此请选择任何一个域类,例如
AnyDomainClass.withTransaction { status ->
// GORM code here
}
这是Hibernate会话,不是HTTP会话。Grails使用OpenSessionInView模式,在该模式中,它打开一个Hibernate会话并保持它在请求完成之前可用,但Spring Security在Grails之前运行(以防它需要阻止访问),因此还没有自动注册会话
最简单的解决方法是将代码包装在withTransaction
块中。无论如何,如果您要向数据库写入数据,这是一个好主意,但也可以避免您看到的问题,并允许延迟加载工作。您在其上调用的withTransaction
域类没有影响,因此请选择任何一个域类,例如
AnyDomainClass.withTransaction { status ->
// GORM code here
}
从伯特本人那里20分钟内回答。我只需要阅读,但这是一个很好的模式,尤其是因为它有助于我余下的春季安全问题的解决。Burt自己在20分钟内回答。我只需要阅读,但这是一个很好的模式,尤其是因为它有助于我余下的spring安全问题的解决。