我知道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
?
什么是订单 myFilter1
及 myFilter2
在里面 filter-spring
,以及如何定义这些顺序(之前和之后) filter-security
)?
1条答案
按热度按时间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安全参考中。