对于非启动Spring项目,是否等效于org.springframework.boot.context.embedded.FilterRegistrationBean?
我正试图在Spring中实现外部会话处理,如所示。不过,我在添加正确的过滤器时遇到了一些问题。SpringBoot似乎定义了正确的bean/过滤器,但我的项目不是SpringBoot,因此它找不到对于非启动Spring项目,是否等效于org.springframework.boot.context.embedded.FilterRegistrationBean?,spring,spring-mvc,servlet-filters,spring-bean,spring-session,Spring,Spring Mvc,Servlet Filters,Spring Bean,Spring Session,我正试图在Spring中实现外部会话处理,如所示。不过,我在添加正确的过滤器时遇到了一些问题。SpringBoot似乎定义了正确的bean/过滤器,但我的项目不是SpringBoot,因此它找不到FilterRegistrationBean。在Spring的非启动版本中是否有类似于这个类的东西?我也尝试过,但无法将其正确导入(看起来此文档引用的是快照版本,因此此包可能从来不是正确版本的一部分)。根据您的容器配置、web.xml或ServletContainerInitializer,您可以注册一
FilterRegistrationBean
。在Spring的非启动版本中是否有类似于这个类的东西?我也尝试过,但无法将其正确导入(看起来此文档引用的是快照版本,因此此包可能从来不是正确版本的一部分)。根据您的容器配置、web.xml或ServletContainerInitializer
,您可以注册一个筛选器并按名称引用它,对于一个过滤器bean,您在应用程序上下文中声明的是有意义的,但我仍然需要一个过滤器bean,这似乎有点像重新发明轮子来编写我自己的过滤器类。@JosephBlair我不明白。如果您想要自己的过滤器
,则需要编写自己的过滤器
。但是,由于Filter
s是由Servlet容器管理的,因此不能让它成为Springbean。Spring的解决方案是将您的过滤器
声明为bean,然后将DelegatingFilterProxy
注册为Servlet
,然后将其委托给在根应用程序上下文中找到的过滤器
bean。我链接到的javadoc解释了所有这些。我理解所有这些,但我并不真正想要“我自己的”Filter
,我只想要FilterRegistrationBean
,因为它已经实现了所有逻辑,而不是试图复制它在自定义创建的Filter
类中的功能。但是,我不能使用它,因为我的项目不是Spring Boot,所以我正在寻找一个我可以使用的等价物。@JosephBlairDelegatingFilterProxy
就是等价物。它不是被声明为bean,而是在XML(web.XML)中声明为Servlet,或者通过WebApplicationInitializer中的ServletContext
。@JosephBlair通常有两个上下文。根上下文由ContextLoaderListener
加载。servlet上下文由DispatcherServlet
加载。您的过滤器bean应该在根上下文中声明。这就是DelegatingFilterProxy
将查找它的地方。