我正在使用Hibernate Filter在每个继承业务域的域中启用分支ID。
static hibernateFilters = {
branchEnabledFilter(condition: ':branch_id=branch_id', types: 'long', default: true)
}
通过Our Grails过滤器启用此休眠过滤器...如下所示。
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 = {
//
}
}
}
首次登录时,我先调用家庭 Controller ,然后在仪表板页面中通过链接调用通知 Controller ...第一次遇到未设置分支ID的错误...但我的过滤器无法正常工作...但未启用这个请求的休眠过滤器...但是如果我修改了过滤器中的任何代码,例如注释println或取消注释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过滤器,在您的情况下只有Auth(controller:'login',action:'auth'),它循环遍历每个过滤器并将其禁用,但是我不确定是否需要这样做。
def hibernateSession = grailsApplication.mainContext.sessionFactory.currentSession
DefaultHibernateFiltersHolder.defaultFilters.each { name ->
hibernateSession.disableFilter(name)
}
关于hibernate - Hibernate过滤器插件在Grails中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30660799/