我正在构建一个使用Spring Security进行身份验证/授权的REST风格的Web服务。
Spring Security附带了大量自己的灵活且可配置的过滤器。但是,我的服务需要定义几个自己的过滤器:
- 它们与安全性完全没有任何关系,因此,不需要在SpringSecurity的API中进行任何配置;和
- 我确实希望在SpringSecurity已经允许请求通过它自己的所有安全过滤器 * 之后 * 调用它们;这意味着这些“非安全性”过滤器只有在SpringSecurity提前允许请求通过时才会被调用
我看到了this answer和this one,但这两个都涉及到配置 other 自定义安全过滤器来与Spring Security的内置过滤器一起工作。我如何配置Sping Boot 来将我的非安全过滤器“定位”在Spring Security的”之后”(过滤器链的更下游)?我如何控制这些过滤器的顺序?
1条答案
按热度按时间vbkedwbf1#
您可以使用@Order注解来设置过滤器的顺序。它的默认值为
Integer.MAX_VALUE
,这样您的过滤器将最后执行(值越低,优先级越高)。下面是一个示例:Spring Security是一个物理
Filter
,但它将处理委托给一系列内部过滤器,例如:SecurityContextPersistenceFilter、RememberMeAuthenticationFilter、AnonymousAuthenticationFilter等。安全过滤器安装在SecurityProperties.DEFAULT_FILTER_ORDER定义的位置,该位置设置为-100
。因此,任何阶数高于-100
的过滤器都将在FilterChainProxy(Spring安全过滤器的具体类)之后执行。例如:
将在安全过滤器之前执行,并且:
将在安全筛选器之后执行