Hibernate过滤器插件在Grails中不起作用
我正在使用Hibernate筛选器在继承业务域的每个域中启用分支id…我在每个域中都包括Hibernate筛选器,例如Hibernate过滤器插件在Grails中不起作用,hibernate,grails,plugins,filter,multi-tenant,Hibernate,Grails,Plugins,Filter,Multi Tenant,我正在使用Hibernate筛选器在继承业务域的每个域中启用分支id…我在每个域中都包括Hibernate筛选器,例如 static hibernateFilters = { branchEnabledFilter(condition: ':branch_id=branch_id', types: 'long', default: true) } 通过我们的Grails过滤器启用此hibernate过滤器…如下所示 def filters = { all(con
static hibernateFilters = {
branchEnabledFilter(condition: ':branch_id=branch_id', types: 'long', default: true)
}
通过我们的Grails过滤器启用此hibernate过滤器…如下所示
def filters = {
all(controller:'login', action:'auth',invert:true) {
before = {
grailsApplication.getArtefacts("Domain")*.clazz.each{ clazz ->
if(clazz.getGenericSuperclass().getName().contains('BusinessDomain')){
def filter = clazz.enableHibernateFilter('branchEnabledFilter')
filter.setParameter('branch_id',applicationContext.springSecurityService.principal?.branchId as long)
}
}
}
after = {
//
}
}
}
第一次登录时,我调用主控制器,然后在仪表板页面中,通过链接调用通知控制器…第一次出现错误,如未设置分支id…但我的筛选器正在工作…但它没有为此请求启用hibernate筛选器…但如果我修改了筛选器中的任何代码,如comment println或uncomment println,那次编译过滤器…然后一切正常。。。请告诉我这里发生了什么。。。如何解决这个问题…如何在所有请求中工作..很难说清楚,但我也在做类似的事情,这就是我能说出来的区别: 我认为每个域筛选器需要有不同的名称,例如:domainAFilter、domainBFilter等 在Grails过滤器中,我使用短版本:
import org.grails.plugin.hibernate.filter.DefaultHibernateFiltersHolder;
def hibernateSession = grailsApplication.mainContext.sessionFactory.currentSession
DefaultHibernateFiltersHolder.defaultFilters.each { name ->
def aFilter = hibernateSession.enableFilter(name)
aFilter.setParameter('branchId', springSecurityService.principal.branchId)
}
我还有一个相反的Grails过滤器,在您的例子中,onlyAuthcontroller:'login',action:'auth',它通过每个过滤器循环并禁用它,但我不确定是否需要它
def hibernateSession = grailsApplication.mainContext.sessionFactory.currentSession
DefaultHibernateFiltersHolder.defaultFilters.each { name ->
hibernateSession.disableFilter(name)
}
我在这里发现有趣的是,您截获了login/auth,它通常只显示登录页面并请求主体的分支id。在大多数情况下,这些信息不会被知道,因为用户正要登录。我可能会在登录成功后应用过滤器。顺便说一句,过滤器是会话感知的,或者首先登录的人为所有其他人设置过滤器?首先。谢谢你的回复。在登录控制器中,身份验证操作给出登录页面…除了该操作之外,在每个控制器的操作中…我请求分支id…反转为true将完成该工作…我想这个问题解决了吗?我也面临同样的问题。谢谢你的回答…在所有域中更改了筛选器名称…仍然没有设置分支id。。。