【发布时间】:2015-06-05 07:30:31
【问题描述】:
我正在使用休眠过滤器在每个继承业务域的域中启用分支 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 = {
//
}
}
}
第一次登录时,我调用主控制器,然后在仪表板页面中,通过链接调用通知控制器...第一次出现错误,例如未设置分支 id...但是我的过滤器工作...但是它没有为此请求启用休眠过滤器...但是如果我修改了过滤器中的任何代码,例如注释 println 或取消注释 println,则编译过滤器...然后一切正常...请告诉我这里发生了什么...如何解决这个问题...如何在所有请求中工作..
【问题讨论】:
-
我在这里发现有趣的是,您拦截了通常只显示登录页面并请求主体的分支 ID 的登录/身份验证。在大多数情况下,由于用户即将登录,因此不会知道此信息。我可能会挂上登录成功,然后应用过滤器。顺便说一句,过滤器是会话感知的,还是首先登录的人为所有其他人设置过滤器?
-
首先。感谢你的回复。在登录控制器中,auth 操作提供登录页面...除了该操作,在每个控制器的操作中...我正在请求分支 id...invert true 将完成这项工作...我认为
-
这个问题解决了吗?我也面临同样的问题。
标签: hibernate grails plugins filter multi-tenant