tomcat容器提供的过滤器Filters【译】
2015-08-03 21:22
761 查看
介绍
Tomcat默认提供了许多可用于Web应用程序的过滤器,可以通过tomcat的$CATALINA_BASE/conf/web.xml或通过在单个Web应用程序
WEB-INF/web.xml中配置他们 。
下面将对每个过滤器进行详细说明。
*注意变量
$CATALINA_BASE可以理解为tomcat的路径
AddDefaultCharsetFilter
说明
HTTP规范指出,如果没有指定"text"(文本)的字符集那么它将默认使用ISO-8859-1字符集。 然而浏览器可能试图自动检测字符集。这可能被攻击者利用来进行XSS攻击。IE浏览器已经默认这种行为。其他浏览器有一个选项来启用它。
该过滤器将强制使用用户设置的字符集来阻止浏览器的的字符集检测,从而防止XSS攻击。
Filter Class Name
org.apache.catalina.filters.AddDefaultCharsetFilter初始化参数
参数 | 说明 |
---|---|
encoding | 如果没有明确的设置一个Servlet的字符集,应设置它。此参数有两个特殊值default和system。system使用JVM默认字符集,default将使用ISO-8859-1。 |
CorsFilter
介绍
该过滤器是W3C的CORS(跨域资源共享)规范的实现,这是一个跨域请求机制。该过滤器的工作原理是将所需的
Access-Control-*headers添加到HttpServletResponse。该过滤器还可以防止HTTP Response Splitting攻击。 如果请求无效或是不允许的,那么请求被拒绝,HTTP状态代码403(禁止)。这里是官方的过滤器请求处理
Filter Class Name
org.apache.catalina.filters.CorsFilter下面是该过滤器所需的最小的配置:
<filter> <filter-name>CorsFilter</filter-name> <filter-class>org.apache.catalina.filters.CorsFilter</filter-class> </filter> <filter-mapping> <filter-name>CorsFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
初始化参数
参数 | 说明 |
---|---|
cors.allowed.origins | 被允许访问的请求。*表示任何来源。 用逗号分割的白名单域名。 例如:http://www.w3.org, https://www.apache.org 默认: * (允许任何请求)。 |
cors.allowed.methods | 被允许访问的HTTP方法,逗号分割。这些方法也将被添加到Access-Control-Allow-Methods响应头中。 例如:GET, POST 默认值:GET, POST, HEAD, OPTIONS |
cors.allowed.headers | 被允许访问的请求头,逗号分割。这些头也将被添加到Access-Control-Allow-Headers响应头中。 如: Origin,Accept 默认值: Origin, Accept, X-Requested-With, Content-Type, Access-Control-Request-Method, Access-Control-Request-Headers |
cors.exposed.headers | 浏览器可以访问的请求头。这些头也将被添加到Access-Control-Expose-Headers响应头中。例如:X-CUSTOM-HEADER-PING,X-CUSTOM-HEADER-PONG 。缺省情况:无。 非简单的头信息默认情况下不外露。 |
cors.preflight.maxage | 秒,浏览器被允许的缓存结果。将会暴露在Access-Control-Max-Age响应头中。负值将阻止CORS过滤添加这个响应头。 默认:1800 |
cors.support.credentials | 一个标志,标示是否支持用户凭据。将会暴露在Access-Control-Allow-Credentials响应头中。它有助于浏览器判断是否实际请求可以使用证书进行 默认:true |
cors.request.decorate | 标示是否CORS特定的属性应该添加到HttpServletRequest对象。默认值:true |
<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> <param-name>cors.allowed.methods</param-name> <param-value>GET,POST,HEAD,OPTIONS,PUT</param-value> </init-param> <init-param> <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> <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> <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>
CORSFilter 和 HttpServletRequest attributes
CORSFilter添加请求有关信息在HttpServletRequest对象中。如果cors.request.decorate初始化参数为true :cors.isCorsRequest: 标示是否CORS请求.
cors.request.origin: The Origin URL, i.e. the URL of the page from where the request originated.
cors.request.type: CORS请求类型。可能的值:
SIMPLE: A request which is not preceded by a pre-flight request.
ACTUAL: A request which is preceded by a pre-flight request.
PRE_FLIGHT: A pre-flight request.
NOT_CORS: A normal same-origin request.
INVALID_CORS: A cross-origin request, which is invalid.
cors.request.headers: Request headers sent as Access-Control-Request-Headers header, for a pre-flight request.
CsrfPreventionFilter
说明
该过滤器提供了一个Web应用程序的基本保障。假定它被映射到/*和所有的URL返回给客户机经由调用编码HttpServletResponse#encodeRedirectURL(String)或HttpServletResponse#encodeURL(String) 。该过滤器通过产生一个随机数并将其存储在会话中,防止CSRF攻击。URL也编码有相同的随机数。 当接收到下一个请求中的请求的随机数进行比较,以在会话随机数且仅当它们是相同的是允许继续请求。
Filter Class Name
org.apache.catalina.filters.CsrfPreventionFilter初始化参数
参数 | 说明 |
---|---|
denyStatus | 请求被拒绝时使用HTTP响应状态代码。默认值是403。 |
entryPoints | 一个逗号隔开不会为一个有效的随机数的存在测试的URL列表。 它们被用来提供一种具有导航离开后导航回到受保护的应用程序。 入口点将被限制为HTTP GET请求,并且不应触发任何安全敏感操作。 |
nonceCacheSize | 将被缓存在一个LRU基础以支持并行请求,有限使用的刷新和背面在浏览器和类似的行为可能导致在提交之前的临时值,而不是当前的先前发出随机数的数量。 如果未设置,5缺省值将被使用。 |
randomClass | 使用类的名称来生成随机数。这个类必须是一个实例java.util.Random。如果未设置,默认值java.security |
ExpiresFilter
可采用高性能的nginx来替换tomcat的实现。若感兴趣可以参考原文!
FailedRequestFilter
介绍
该过滤器触发参数解析的请求和拒绝的请求,如果一些参数,因为分析错误或请求大小限制(如参数解析过程中跳过maxParameterCount的属性连接器 )。 此过滤器可用于确保提交的客户none参数值都将丢失。需要注意的是参数解析可能会占用一个HTTP请求的主体,因此,如果此过滤器保护的servlet使用需要谨慎request.getInputStream()或request.getReader()的调用。 一般通过将该过滤器断裂的Web应用程序的风险是不那么高,因为参数解析时消耗请求体之前检查请求的内容类型。
请注意,对于POST请求被正确解析,一个SetCharacterEncodingFilter滤波器必须高于这一配置。 见的characterEncoding页中的常见问题的详细信息。
该请求被拒绝,HTTP状态代码400(错误请求)。
Filter Class Name
org.apache.catalina.filters.FailedRequestFilterHttpHeaderSecurityFilter
介绍
有一个数字,可以被添加到所述响应,以改善连接的安全性的HTTP标头。 该过滤器提供了一种机制,将这些头。 注意有更多要求的是安全性相关的头,像CORS,被implemted作为单独的过滤器。Filter Class Name
org.apache.catalina.filters.HttpHeaderSecurityFilter初始化参数
参数 | 说明 |
---|---|
hstsEnabled | 将一个HTTP严格传输安全(HSTS)头( Strict-Transport-Security )来对安全请求的响应集。任何HSTS头已经存在将被替换。 请参见RFC 6797的HSTS的进一步细节。如果没有指定,默认值为true |
hstsMaxAgeSeconds | 应该在HSTS头中使用的最大年龄值。负值将被视为零。如果未指定,默认值0 |
hstsIncludeSubDomains | 应的includeSubDomains参数被包括在HSTS头。如果未指定,默认值false |
antiClickJackingEnabled | 如果反点击顶头部( X-Frame-Options )的响应进行设置。任何反点击顶头部已经存在将被替换。如果没有指定,默认值为true |
antiClickJackingOption | 必须是一个DENY,SAMEORIGIN ,ALLOW-FROM(不区分大小写)。如果未指定,默认值DENY |
antiClickJackingUri | 如果将允许-FROM用于antiClickJackingOption,什么URI应该被允许? 如果未指定,默认值一个空字符串 |
blockContentTypeSniffingEnabled | 要阻止的内容类型嗅探(头X-Content-Type-Options )对每个响应进行设置。 如果已经存在,则报头将被替换。 如果没有指定,默认值为true |
RemoteAddrFilter
远程地址过滤器,不过多解释,可采用高性能的nginx来替换tomcat的实现。若感兴趣可以参考原文!
RemoteHostFilter
远程host过滤器,不过多解释,可采用高性能的nginx来替换tomcat的实现。若感兴趣可以参考原文!
RemoteIpFilter
远程IP过滤器,不过多解释,可采用高性能的nginx来替换tomcat的实现。若感兴趣可以参考原文!
RequestDumperFilter
介绍
该过滤器从请求和响应中获取详细信息,目的是方便调试。警告:使用此过滤器有副作用这个过滤器输出包括请求的任何参数。该参数将使用默认的平台编码进行解码。任何后续调用request.setCharacterEncoding()在Web应用程序中不会有任何效果。
Filter Class Name
org.apache.catalina.filters.RequestDumperFilter简单的配置
可以在程序的web.xml中或者tomcat的
$CATALINA_BASE/conf/web.xml中配置它。
<filter> <filter-name>requestdumper</filter-name> <filter-class> org.apache.catalina.filters.RequestDumperFilter </filter-class> </filter> <filter-mapping> <filter-name>requestdumper</filter-name> <url-pattern>*</url-pattern> </filter-mapping>
在tomcat`$CATALINA_BASE/conf/logging.properties中添加一个专用的日志记录
# To this configuration below, 1request-dumper.org.apache.juli.FileHandler # also needs to be added to the handlers property near the top of the file 1request-dumper.org.apache.juli.FileHandler.level = INFO 1request-dumper.org.apache.juli.FileHandler.directory = ${catalina.base}/logs 1request-dumper.org.apache.juli.FileHandler.prefix = request-dumper. 1request-dumper.org.apache.juli.FileHandler.formatter = org.apache.juli.VerbatimFormatter org.apache.catalina.filters.RequestDumperFilter.level = INFO org.apache.catalina.filters.RequestDumperFilter.handlers = \ 1request-dumper.org.apache.juli.FileHandler
SetCharacterEncodingFilter
介绍
用户代理不总是包含字符编码请求的信息。根据请求判断是否处理,默认ISO-8859-1并不是我们期望的。这个过滤器提供了强制设置的编码。本质上,这要求过滤器调用ServletRequest.setCharacterEncoding()方法。该过滤器应该在POST请求解析之前被调用,因此,过滤器的顺序很重要。请注意,对于GET请求的编码此处未设置,请在页面请求中设置字符集!
Filter Class Name
org.apache.catalina.filters.SetCharacterEncodingFilter初始化参数
参数 | 说明 |
---|---|
encoding | 字符集 |
ignore | 确定由用户代理指定的任何字符编码是否被忽略。如果为true,由用户代理提供的任何值将被忽略。如果假的,编码是唯一设置,如果用户代理没有指定的编码。默认值是false |
WebdavFixFilter
介绍
微软操作系统有两个WebDAV客户端。一个是用于与端口80,另一个用于所有其他端口。试图与Tomcat的WebDAV的Servlet来交流的时候用端口80用于实现不坚持WebDAV规范和失败。该过滤器为此提供了一个修复通过强制使用WebDAV实现,通过端口80的连接。Filter Class Name
org.apache.catalina.filters.WebdavFixFilter*注意:tomcat版本Version 7.0.63
原文地址:https://tomcat.apache.org/tomcat-7.0-doc/config/filter.html
相关文章推荐
- java-模拟tomcat服务器
- i-jetty环境搭配与编译
- 实现单Tomcat多Server配置
- 生产环境下的Tomcat配置
- Linux部署Tomcat服务器
- 探索PowerShell(十二) 筛选器 Filters
- tomcat在opensuse下开机自启失败的原因分析及解决方法
- jsp项目中更改tomcat的默认index.jsp访问路径的方法
- Tomcat 多端口 多应用
- tomcat 5.0 + apache 2.0 完全安装步骤详解
- Tomcat安全设置 win2003 下tomcat权限限制
- Jsp和PHP共用80端口整合Apache和Tomcat(访问时无需加端口号)
- Tomcat服务器 安全设置第1/3页
- tomcat 6.0.20在一个机器上安装多个服务的方法
- Tomcat 5.5 数据库连接池配置
- Tomcat内存溢出分析及解决方法
- apache tomcat 一个网站多域名的实现方法
- Tomcat无法加载css和js等静态资源文件的解决思路
- Apache与Tomcat服务器整合的基本配置方法及概要说明