tomcat java.lang.IllegalArgumentException:筛选器不能为空

h4cxqtbf  于 2024-01-08  发布在  Java
关注(0)|答案(1)|浏览(250)

随着Springboot从2.7.2更新到3.2.0,现在Filter类开始抛出异常
原因:org. springframework. Boot . web. server. WebServerException:无法在org. springframework. Boot . web. embedded. tomcat. TomcatWebServer. initialize启动嵌入式Tomcat(TomcatWebServer.java:142)位于org.springframework.boot.web.embedded.tomcat.TomcatWebServer。(TomcatWebServer.java:104)at org. springframework. Boot . web. embedded. tomcat. TomcatServletWebServerFactory. getTomcatWebServer(TomcatServletWebServerFactory.java:501)at org. springframework. Boot . web. embedded. tomcat. TomcatServletWebServerFactory. getWebServer(TomcatServletWebServerFactory.java:218)at org. springframework. Boot . web. servlet. context. ServletWebServerApplicationContext. WebServer(ServletWebServerApplicationContext.java:188)at org. springframework. Boot . web. servlet. context. ServletWebServerApplicationContext. onRefresh(ServletWebServerApplicationContext.java:162). 11 common frames omitted by:java. lang. IllegalArgumentException:筛选器在org. springframework. util. Assert. notbox中不能为null(Assert.java:172)at org. springframework. Boot . web. servlet. AbstractFilterRegistrationBean. getDescription(AbstractFilterRegistrationBean.java:223)at org. springframework. Boot . web. servlet. RegistrationBean. onStartup(RegistrationBean.java:47)at org. springframework. Boot . web. servlet. context. ServletWebServerApplicationContext. selfInitialize(ServletWebServerApplicationContext.java:241)at org. springframework. Boot . web. embedded. tomcat. TomcatStarter. onStartup(TomcatStarter.java:52)位于org. apache. Catalina . core. StandardContext. startInternal(StandardContext.java:4850)at org. apache. Catalina . util. LifecleBase. start(LifecleBase.java:171)at org. apache. Catalina . core. ContainerBase $www.example.com(ContainerBase.java:1332)at org. apache. Catalina . core. ContainerBase $www.example.com(ContainerBase.java:1322)at java. base/java. util. concurrent. FutureTask. run(FutureTask.java:在org. apache. tomcat. util. threads. InlineExecutorService. execute(InlineExecutorService.java:75)在java. base/java. util. concurrent. AbstractExecutorService. submit(AbstractExecutorService.java:StartChild.call866)at org. apache. Catalina . core. StandardEngine. startInternal(StandardEngine.java:240)在org. apache. Catalina . util. LifecleBase. start(Lifecycle Base.java:地址:org. apache. Catalina . core. StandardService. startInternal(StandardService.java:433)在org. apache. Catalina . util. LifecleBase. start(LifecycleBase.java:171)在org. apache. Catalina . core. StandardServer. startInternal(StandardServer.java:在org. apache. Catalina . util. LifecleBase. start(LifecycleBase.java:171)at org. apache. Catalina . startup. Tomcat. start(Tomcat.java:488)at org. springframework. Boot . web. embedded. tomcat. TomcatWebServer. initialize(TomcatWebServer.java:123).
看起来像抛出异常的代码

  1. @Configuration
  2. public class WebMvcConfig implements WebMvcConfigurer {
  3. @Value("${system.debug.enabled:false}")
  4. private boolean debugEnabled;
  5. @Override
  6. public void addInterceptors(InterceptorRegistry registry) {
  7. registry.addInterceptor(httpHeaderInterceptor());
  8. }
  9. @Override
  10. public void addCorsMappings(CorsRegistry registry) {
  11. registry.addMapping("/log/**").allowedOrigins("*")
  12. .allowedMethods("POST", "GET", "PUT", "PATCH", "OPTIONS", "DELETE")
  13. .allowedHeaders("header1", "header2", "header3")
  14. .allowedHeaders("Origin", "Authorization", "X-Requested-With", "Content-Type", "Accept")
  15. .allowCredentials(false).maxAge(3600);
  16. }
  17. @Bean
  18. public HandlerInterceptor httpHeaderInterceptor() {
  19. return (HandlerInterceptor) new HttpHeaderInterceptor();
  20. }
  21. private FilterRegistrationBean newFilterRegistrationBean(Filter filter, int order) {
  22. final FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();
  23. filterRegistrationBean.setOrder(order);
  24. filterRegistrationBean.addUrlPatterns("/*");
  25. return filterRegistrationBean;
  26. }
  27. @Bean
  28. public FilterRegistrationBean stopWatchFilter() {
  29. Filter filter = debugEnabled ? new StopWatchFilter() : new NoopFilter();
  30. FilterRegistrationBean filterRegistrationBean = newFilterRegistrationBean(filter, 1);
  31. return filterRegistrationBean;
  32. }
  33. @Bean
  34. public FilterRegistrationBean gzipFilter() {
  35. GZipRequestFilter gzipRequestFilter = new GZipRequestFilter();
  36. return newFilterRegistrationBean(gzipRequestFilter, 2);
  37. }
  38. @Bean
  39. public FilterRegistrationBean registerOpenSessionInViewFilterBean() {
  40. OpenEntityManagerInViewFilter openEntityManagerInViewFilter = new OpenEntityManagerInViewFilter();
  41. return newFilterRegistrationBean(openEntityManagerInViewFilter, 1);
  42. }
  43. }

字符串
根据我的理解,

  1. @Bean
  2. public FilterRegistrationBean gzipFilter() {
  3. GZipRequestFilter gzipRequestFilter = new GZipRequestFilter();
  4. return newFilterRegistrationBean(gzipRequestFilter, 2);
  5. }
  6. @Bean
  7. public FilterRegistrationBean registerOpenSessionInViewFilterBean() {
  8. OpenEntityManagerInViewFilter openEntityManagerInViewFilter = new OpenEntityManagerInViewFilter();
  9. return newFilterRegistrationBean(openEntityManagerInViewFilter, 1);
  10. }


但是place类正在初始化,但仍然告诉NULL。删除此代码后,它将启动服务器。

7ivaypg9

7ivaypg91#

您需要将filter参数传递给FilterRegistrationBean构造函数,如下所示

  1. private FilterRegistrationBean newFilterRegistrationBean(Filter filter, int order) {
  2. final FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(filter);
  3. filterRegistrationBean.setOrder(order);
  4. filterRegistrationBean.addUrlPatterns("/*");
  5. return filterRegistrationBean;
  6. }

字符串

相关问题