tomcat之过滤器
Tomcat 内置过滤器详解
Tomcat 提供了多种内置过滤器(Filter),用于处理跨域请求、安全防护、编码设置等常见场景。这些过滤器通过配置 web.xml 即可生效,无需手动编码实现。本文将详细介绍常用的 Tomcat 内置过滤器及其配置方式。
CorsFilter:跨域资源共享过滤器
org.apache.catalina.filters.CorsFilter 实现了 W3C 跨域资源共享(CORS)规范,用于解决前端跨域请求被浏览器拦截的问题。其核心功能是在 HTTP 响应中添加 Access-Control-* 系列头信息,允许指定域的请求访问资源。
配置示例
<filter>
<filter-name>CorsFilter</filter-name>
<filter-class>org.apache.catalina.filters.CorsFilter</filter-class>
<!-- 允许访问的源域名(多个用逗号分隔,* 表示允许所有) -->
<init-param>
<param-name>cors.allowed.origins</param-name>
<param-value>https://example.com,http://localhost:3000</param-value>
</init-param>
<!-- 允许的 HTTP 方法 -->
<init-param>
<param-name>cors.allowed.methods</param-name>
<param-value>GET,POST,PUT,DELETE,OPTIONS</param-value>
</init-param>
<!-- 允许的请求头 -->
<init-param>
<param-name>cors.allowed.headers</param-name>
<param-value>Content-Type,Authorization,X-Requested-With</param-value>
</init-param>
<!-- 允许暴露给客户端的响应头 -->
<init-param>
<param-name>cors.exposed.headers</param-name>
<param-value>Access-Control-Allow-Origin</param-value>
</init-param>
<!-- 是否支持带凭据的请求(如 Cookie、Authorization) -->
<init-param>
<param-name>cors.support.credentials</param-name>
<param-value>true</param-value>
</init-param>
<!-- 预检请求(OPTIONS)结果的缓存时间(秒) -->
<init-param>
<param-name>cors.preflight.maxage</param-name>
<param-value>3600</param-value> <!-- 1小时 -->
</init-param>
</filter>
<filter-mapping>
<filter-name>CorsFilter</filter-name>
<url-pattern>/*</url-pattern> <!-- 对所有请求生效 -->
</filter-mapping>
关键参数说明
cors.allowed.origins:限制允许跨域的源(避免滥用*,生产环境建议指定具体域名)。cors.support.credentials:设为true时,cors.allowed.origins不能为*,需指定具体域名。cors.preflight.maxage:减少预检请求次数,提升性能。
CsrfPreventionFilter:跨站请求伪造防护
CsrfPreventionFilter 用于防御跨站请求伪造(CSRF)攻击,原理是: