您好我正在使用Grails filter plugin
我正在尝试定义默认过滤器,如下所示
// Defined inside the Book entity
static hibernateFilters = {
activeFilter(condition:'active=1', default:true)
}
当我运行集成测试时,过滤器不适用于
等动态查找器方法Book.findAll()
如果我在BootStrap.groovy类中添加以下行
Book.enableHibernateFilter('activeFilter')
然后应用过滤器。
但是,当运行应用程序时,永远不会应用过滤器,无论是否有BootStrap.groovy中的上述代码
有什么想法吗?
经过一番挖掘后,我发现了
hibernate过滤器插件在没有zkgrails插件的情况下运行良好,但两者似乎无法协同工作:(
下面的代码片段对我来说似乎是个问题。
我认为我们可以在这里遇到两个问题
1)最初执行到达 全部(控制器:'',动作:'')
在应用程序启动期间只有一次。我想它应该在每次有新请求并因此新会话时到达那里。
2)即使经过一定的修改后它以某种方式到达那里,我也不认为它会过去 全部(控制器:'',动作:'')
作曲家在zkoss中使用
class HibernateFilterFilters {
def filters = {
all(controller:'*', action:'*') {
before = {
def session = grailsApplication.mainContext.sessionFactory.currentSession
DefaultHibernateFiltersHolder.defaultFilters.each {name ->
session.enableFilter(name)
}
}
after = {
}
afterView = {
}
}
}
}
答案 0 :(得分:1)
经过一番挖掘后,我找到了上述问题的解决方法
我基本上扩展了GrailsOpenSessionInViewFilter类
public class OpenSessionInViewFilterExt extends GrailsOpenSessionInViewFilter{
@Override
protected Session getSession(SessionFactory sessionFactory) throws DataAccessResourceFailureException {
Session session = super.getSession(sessionFactory);
for (Object filterName : DefaultHibernateFiltersHolder.getDefaultFilters()) {
session.enableFilter((String) filterName);
}
return session;
}
}
我在web.xml中也有一个条目
<filter>
<filter-name>OpenSessionInViewFilterExt</filter-name>
<filter-class>com.nthdimenzion.hibernate.ext.OpenSessionInViewFilterExt</filter-class>
</filter>
<filter-mapping>
<filter-name>OpenSessionInViewFilterExt</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
现在,每次创建新会话时,都会为其启用默认过滤器。我认为这应该可行,但是如果可以在zkgrails插件或hibernate过滤器插件中进行一些更改以便两者可以在单个应用程序中共存,那将会更好:)
由于
答案 1 :(得分:-1)
在我的Grails 2.5.X应用程序中,我在网络过滤器中启用了休眠过滤器,即我在grails-app/conf/Filters.groovy
class Filters {
publishedContentFilter(uri: '/**'){
before = {
// enable the 'published filter in the Condition domain class
Condition.enableHibernateFilter('published')
}
}
}
在插件本身的集成测试中,测试类的filters are enabled in the setup method。