0%

tomcat之过滤器

过滤器

CorsFilter

org.apache.catalina.filters.CorsFilter是W3C CORS(跨域资源共享)规范的一种实现,在HttpServletResponse中增加Acess-Control-*头,同时保护HTTP响应避免拆分。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
<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>*</param-value>
</init-param>
<init-param>
<!-- 允许访问资源的HTTP方法 Access-Control-Allow-Methods的一部分 -->
<param-name>cors.allowed.methods</param-name>
<param-value>GET,POST,HEAD,OPTIONS,PUT</param-value>
</init-param>
<init-param>
<!-- 构造实际请求时可以使用的请求头 Access-Control-Allow-Headers的一部分 -->
<param-name>cors.allowed.headers</param-name>
<param-value>Content-Type,X-Requested-With,accept,Origin,Access-Control-Request-Method,Access-Control-Request-Headers</param-value>
</init-param>
<init-param>
<!-- 允许访问的头信息列表 Access-Control-Allow-Headers的一部分 -->
<param-name>cors.exposed.headers</param-name>
<param-value>Access-Control-Allow-Origin,Access-Control-Allow-Credentials</param-value>
</init-param>
<init-param>
<!-- 资源是否支持用户证书 -->
<param-name>cors.support.credentials</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<!-- 浏览器允许缓存Preflight请求结果的时间 单位s -->
<param-name>cors.preflight.maxage</param-name>
<param-value>10</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CorsFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

CsrfPreventionFilter

CSRF 跨域请求伪造 CsrfPreventionFilter过滤器提供了基本的CSRF保护,通过生成一个随机数存储到会话中,URL使用该随机数进行编码。当接收到下一个请求时,请求中的随机数与会话中的进行对比,两者相同,请求才会允许

ExpiresFilter

负责设置服务器响应中的Expires头和Cache-Control头的max-age

FailedRequestFilter

参数解析失败时,拒绝该请求,原理是先调用getParameter进行解析参数

可能会消费HTTP的请求体,如果使用该Filter保护请求,为了POST请求可以正常解析,需要在该Filter之前配置SetCharacterEncodingFilter过滤器

RemoteAddrFilter

比较提交请求的客户端ip地址是否符合指定的正则表达式

RemoteHostFilter

比较提交请求的客户端主机域名是否符合指定的正则表达式

RemoteIpFilter

使用X-Forwarded-For来获取最原始的客户端ip

X-Forwarded-For: client,proxy1,proxy2

SetCharacterEncodingFilter

设置编码格式