繁体   English   中英

弹簧和弹簧安全过滤器的过滤周期

[英]Filter period of spring and spring security filters

我知道 servlet web requet 将通过:

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

如果我使用弹簧,它是:

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-springfilter-security(FilterChainProxy)顺序是什么?
  • filter-springmyFilter1myFilter2顺序是什么,以及如何定义这些顺序(在filter-security之前和之后)?

小程序过滤器

您可以使用@Order注释、 Ordered接口或FilterRegistrationBean设置自定义 servlet 过滤器的Ordered ,请参阅Spring Boot 参考

让 Filter beans 无序通常是安全的。 如果需要特定的顺序,您应该使用@Order注释Filter或使其实现Ordered 您不能通过使用@Order注释其 bean 方法来配置Filter的顺序。 如果您无法更改Filter类以添加@Order或实现Ordered ,则必须为Filter定义FilterRegistrationBean并使用setOrder(int)方法设置注册 bean 的顺序。

安全过滤链

您可以使用@Order设置自定义安全过滤器链的顺序,请参阅Spring Security Reference

(2) 创建一个包含@OrderWebSecurityConfigurerAdapter实例来指定应该首先考虑哪个WebSecurityConfigurerAdapter

默认顺序记录在WebSecurityConfigurerAdapter

安全过滤器

您可以设置您的自定义安全滤波器的阶addFilterAfter​addFilterBefore ,看到HttpSecurityBuilder#addFilterBefore

允许在已知Filter类之一之前添加Filter Filter

默认顺序记录在Spring Security Reference 中

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM