下面列出了org.springframework.boot.test.context.FilteredClassLoader#org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
@Override
public void onStartup(ServletContext aServletContext) throws ServletException
{
// 2) Make username accessible to logging framework
FilterRegistration loggingFilter = aServletContext.addFilter("logging",
LoggingFilter.class);
loggingFilter.addMappingForUrlPatterns(EnumSet.of(DispatcherType.REQUEST), false, "/*");
// 5) Make sure we have one JPA session/transaction per request. Closes session at the
// end, without this, changed data may not be automatically saved to the DB.
FilterRegistration openSessionInViewFilter = aServletContext.addFilter("opensessioninview",
OpenEntityManagerInViewFilter.class);
openSessionInViewFilter.addMappingForUrlPatterns(EnumSet.of(DispatcherType.REQUEST), false,
"/*");
aServletContext.addListener(HttpSessionEventPublisher.class);
}
@Override
public void onStartup(ServletContext aServletContext) throws ServletException
{
// 2) Make username accessible to logging framework
FilterRegistration loggingFilter = aServletContext.addFilter("logging",
LoggingFilter.class);
loggingFilter.addMappingForUrlPatterns(EnumSet.of(DispatcherType.REQUEST), false, "/*");
// 5) Make sure we have one JPA session/transaction per request. Closes session at the
// end, without this, changed data may not be automatically saved to the DB.
FilterRegistration openSessionInViewFilter = aServletContext.addFilter("opensessioninview",
OpenEntityManagerInViewFilter.class);
openSessionInViewFilter.addMappingForUrlPatterns(EnumSet.of(DispatcherType.REQUEST), false,
"/*");
aServletContext.addListener(HttpSessionEventPublisher.class);
}
@Bean
public FilterRegistrationBean openEntityManagerInViewFilter() {
FilterRegistrationBean<OpenEntityManagerInViewFilter> filterRegistrationBean
= new FilterRegistrationBean<>(new OpenEntityManagerInViewFilter());
filterRegistrationBean.addUrlPatterns("/*");
filterRegistrationBean.setName("openEntityManagerInViewFilter");
filterRegistrationBean.setOrder(-200); // 必须在安全过滤器(-100)之前执行
filterRegistrationBean.setDispatcherTypes(EnumSet.of(DispatcherType.REQUEST, DispatcherType.FORWARD));
return filterRegistrationBean;
}
@Test
public void testInterceptorReplacedByFilter() {
this.webApplicationContextRunner.run(context -> {
assertThat(context).doesNotHaveBean(OpenEntityManagerInViewInterceptor.class);
assertThat(context).hasSingleBean(OpenEntityManagerInViewFilter.class);
});
}
@Test
public void testDisabledByProperty() {
this.webApplicationContextRunner
.withPropertyValues("spring.jpa.open-in-view=false")
.run(context -> {
assertThat(context).doesNotHaveBean(OpenEntityManagerInViewInterceptor.class);
assertThat(context).doesNotHaveBean(OpenEntityManagerInViewFilter.class);
});
}
@Test
public void testDisabledByMissingEntityManagerClass() {
this.webApplicationContextRunner
.withClassLoader(new FilteredClassLoader(EntityManager.class))
.run(context -> {
assertThat(context).doesNotHaveBean(OpenEntityManagerInViewInterceptor.class);
assertThat(context).doesNotHaveBean(OpenEntityManagerInViewFilter.class);
});
}
@Override
protected Filter[] getServletFilters() {
return new Filter[] { new OpenEntityManagerInViewFilter() };
}
@Override
protected Filter[] getServletFilters() {
return new Filter[] { new OpenEntityManagerInViewFilter() };
}
@Bean
@ConditionalOnMissingBean({OpenEntityManagerInViewInterceptor.class, OpenEntityManagerInViewFilter.class})
@ConditionalOnMissingFilterBean(OpenEntityManagerInViewFilter.class)
public OpenEntityManagerInViewFilter openEntityManagerInViewFilter() {
return new OpenEntityManagerInViewFilter();
}
@Bean
public FilterRegistrationBean<?> openEntityManagerInViewFilter() {
FilterRegistrationBean<?> filterBean = new FilterRegistrationBean<>(new OpenEntityManagerInViewFilter());
filterBean.addUrlPatterns(PATH_DAV);
return filterBean;
}
/**
* Spring
* 提供了FilterRegistrationBean类,此类提供setOrder方法,可以为filter设置排序值,让spring在注册web
* filter之前排序后再依次注册。
*
* @time 2018年4月10日 下午4:58:19.
*
* @version V1.0
* @return FilterRegistrationBean
*/
@Bean
public FilterRegistrationBean registFilter() {
FilterRegistrationBean registration = new FilterRegistrationBean();
registration.setFilter(new OpenEntityManagerInViewFilter());
registration.addUrlPatterns("/*");
registration.setOrder(1);
return registration;
}