Spring security 在Spring安全过滤器链之前执行servlet过滤器

Spring security 在Spring安全过滤器链之前执行servlet过滤器,spring-security,servlet-filters,Spring Security,Servlet Filters,我将在一个已经存在的网站上介绍SpringWeb安全性。现在出现了一个问题: 我希望在Spring安全过滤器链之前的Tomcat过滤器链中执行我的自定义过滤器。我不想让他们成为这个春季安全过滤链的一部分 我所发现的只是SpringBoot中的一个解决方案(请参阅),但我没有使用SpringBoot 2016年11月22日更新: 这是我的web.xml的一部分-这里只添加了自定义筛选器: <filter-mapping> <filter-name>MyFilter

我将在一个已经存在的网站上介绍SpringWeb安全性。现在出现了一个问题:

我希望在Spring安全过滤器链之前的Tomcat过滤器链中执行我的自定义过滤器。我不想让他们成为这个春季安全过滤链的一部分

我所发现的只是SpringBoot中的一个解决方案(请参阅),但我没有使用SpringBoot


2016年11月22日更新:

这是我的
web.xml
的一部分-这里只添加了自定义筛选器:

<filter-mapping>
    <filter-name>MyFilter</filter-name>
    <url-pattern>/*</url-pattern>
    <dispatcher>REQUEST</dispatcher>
</filter-mapping>

结果是:Spring安全性过滤器首先进入,并且仅在我的自定义过滤器之后。


如何交换?

如果在springSecurity筛选器声明之前在Web.xml中定义Web安全筛选器,则此筛选器将不属于spring安全筛选器链的一部分,并且您的筛选器将在spring安全筛选器链之前执行

或者,如果您希望在web服务器级别执行筛选器,您可以在tomcat web.xml中定义筛选器,该筛选器可在conf/目录中找到。此筛选器将在应用程序筛选器链之前执行。 但是这个过滤器将在tomcat下的所有web应用程序运行时执行


请注意,您还需要使filter类对所有web应用程序都可用,可能是将它放在Tomcat的lib/目录中。

是的,但是我的Spring安全筛选器链没有添加到“web.xml”中,我使用带有“@EnableWebSecurity”注释的“WebSecurityConfigureAdapter”。“web.xml”中仅声明自定义筛选器。(见最新问题)。如何使我的自定义过滤器在此场景中成为所有过滤器中的第一个?它的工作原理与您描述的一样!现在,我已经通过
web.xml
定义并映射了springSecurityFilterChain(不像以前那样通过
AbstractSecurityWebApplicationInitializer
),并将我的自定义筛选器放在该
筛选器映射之前。在此之后,我在一个Spring安全链过滤器中放置了一个断点,然后可以在调试器中看到我的自定义过滤器在Spring安全之前执行。非常感谢。
public class MySecurityWebApplicationInitializer extends AbstractSecurityWebApplicationInitializer {
    ...
}