27.4.1 Servlets、Filters和listeners
使用内嵌servlet容器时,你可以 通过使用Spring beans或扫描Servlet组件的方式注册servlets,filters及特定Servlet相关的所有listeners(比如
HttpSessionListener
)。将Servlet、Filter和listener注册为Spring bean
所有
Servlet
,Filter
或servlet *Listener
实例,只要是Spring bean,都会注册到内嵌容器中。如果想在配置期间引用application.properties
的属性,这是非常方便的。默认情况下,如果上下文只包含单个Servlet,那它将被映射到/
。如果存在多个servlet beans,那么bean的名称将被用作路径的前缀,过滤器将映射到/*
。如果基于约定(convention-based)的映射不够灵活,你可以使用
ServletRegistrationBean
,FilterRegistrationBean
,ServletListenerRegistrationBean
实现完全的控制。Spring Boot带有许多的自动配置。它们可能定义Filter bean。这里有一些Filter以及它们的顺序的例子(低位意味着更高的优先级)。
Servlet Filter | Order |
OrderedCharacterEncodingFilter | Ordered.HIGHEST_PRECEDENCE |
WebMvcMetricsFilter | Ordered.HIGHEST_PRECEDENCE + 1 |
ErrorPageFilter | Ordered.HIGHEST_PRECEDENCE + 1 |
HttpTraceFilter | Ordered.LOWEST_PRECEDENCE - 10 |
无序的Filter bean通常是安全的。
如果需要一个特定的顺序,你应当避免配置一个在
Ordered.HIGHEST_PRECEDENCE
上读取请求体的Filter。因为它可能违反你的应用的字符编码配置。如果一个Servlet filter包裹请求,它应当被配置一个顺序。此顺序不高于FilterRegistrationBean.REQUEST_WRAPPER_FILTER_MAX_ORDER
。最近更新 3yr ago