spring和spring安全过滤器的过滤周期

wecizke3  于 2021-09-29  发布在  Java
关注(0)|答案(1)|浏览(308)

我知道servlet web请求将通过:

request -> filter-1 -> filter-2 -> ... -> filter-n -> servlet

如果我使用spring,它是:

request -> filter-1 -> filter-2 -> filter-spring(DelegatingFilterProxy) -> ... -> filter-n -> servlet

如果我将一个过滤器定义为bean,那么这个bean将包含在filter spring中:

filter-spring(myFilter1 -> myFilter2...)

如果我使用spring security,将创建一个名为filterchainproxy的过滤器,并将其包含在delegatingfilterproxy中:

filter-spring(myFilter1 -> filter-security(FilterChainProxy) -> myFilter2...)

如果我定义了安全过滤器,它将添加到filterchainproxy中:

filter-spring(myFilter1 -> filter-security(mySecurityFilter1 -> mySecurityFilter2 ...) -> myFilter2...)

我的问题是:
什么是订单 filter-spring(DelegatingFilterProxy) 在全局过滤器中?
什么是订单 filter-security(FilterChainProxy) 在里面 filter-spring ?
什么是订单 myFilter1myFilter2 在里面 filter-spring ,以及如何定义这些顺序(之前和之后) filter-security )?

nzrxty8p

nzrxty8p1#

Servlet过滤器
您可以使用 @Order 注解, Ordered 接口或 FilterRegistrationBean ,请参阅spring引导参考:
让过滤豆处于无序状态通常是安全的。如果需要特定的订单,则应在 Filter 具有 @Order 或者让它实现 Ordered . 您无法配置订单的顺序 Filter 通过使用 @Order . 如果您无法更改 Filter 要添加的类 @Order 或实施 Ordered ,您必须定义一个 FilterRegistrationBean 对于 Filter 并使用 setOrder(int) 方法。
安全过滤链
您可以使用设置自定义安全筛选器链的顺序 @Order ,请参阅spring安全参考:
(2) 创建的示例 WebSecurityConfigurerAdapter 包含 @Order 指定 WebSecurityConfigurerAdapter 应该首先考虑。
默认订单记录在 WebSecurityConfigurerAdapter .
安全过滤器
您可以使用设置自定义安全筛选器的顺序 addFilterAfter​ , addFilterBefore 看见 HttpSecurityBuilder#addFilterBefore :
允许添加 Filter 在一个已知的 Filter 上课。
默认订单记录在spring安全参考中。

相关问题