目录[-]
介绍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 Nameorg.apache.catalina.filters.AddDefaultCharsetFilter 初始化参数
CorsFilter介绍该过滤器是W3C的CORS(跨域资源共享)规范的实现,这是一个跨域请求机制。 该过滤器的工作原理是将所需的Access-Control-*headers添加到HttpServletResponse。该过滤器还可以防止HTTP Response Splitting攻击。 如果请求无效或是不允许的,那么请求被拒绝,HTTP状态代码403(禁止)。这里是官方的过滤器请求处理 Filter Class Nameorg.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> 初始化参数
一个完整的例子: <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 attributesCORSFilter添加请求有关信息在HttpServletRequest对象中。如果cors.request.decorate初始化参数为true :
CsrfPreventionFilter说明该过滤器提供了一个Web应用程序的基本保障。假定它被映射到/*和所有的URL返回给客户机经由调用编码HttpServletResponse#encodeRedirectURL(String)或HttpServletResponse#encodeURL(String) 。 该过滤器通过产生一个随机数并将其存储在会话中,防止CSRF攻击。URL也编码有相同的随机数。 当接收到下一个请求中的请求的随机数进行比较,以在会话随机数且仅当它们是相同的是允许继续请求。 Filter Class Nameorg.apache.catalina.filters.CsrfPreventionFilter 初始化参数
ExpiresFilter可采用高性能的nginx来替换tomcat的实现。若感兴趣可以参考原文! FailedRequestFilter介绍该过滤器触发参数解析的请求和拒绝的请求,如果一些参数,因为分析错误或请求大小限制(如参数解析过程中跳过maxParameterCount的属性连接器 )。 此过滤器可用于确保提交的客户none参数值都将丢失。 需要注意的是参数解析可能会占用一个HTTP请求的主体,因此,如果此过滤器保护的servlet使用需要谨慎request.getInputStream()或request.getReader()的调用。 一般通过将该过滤器断裂的Web应用程序的风险是不那么高,因为参数解析时消耗请求体之前检查请求的内容类型。 请注意,对于POST请求被正确解析,一个SetCharacterEncodingFilter滤波器必须高于这一配置。 见的characterEncoding页中的常见问题的详细信息。 该请求被拒绝,HTTP状态代码400(错误请求)。 Filter Class Nameorg.apache.catalina.filters.FailedRequestFilter HttpHeaderSecurityFilter介绍有一个数字,可以被添加到所述响应,以改善连接的安全性的HTTP标头。 该过滤器提供了一种机制,将这些头。 注意有更多要求的是安全性相关的头,像CORS,被implemted作为单独的过滤器。 Filter Class Nameorg.apache.catalina.filters.HttpHeaderSecurityFilter 初始化参数
RemoteAddrFilter远程地址过滤器,不过多解释,可采用高性能的nginx来替换tomcat的实现。若感兴趣可以参考原文! RemoteHostFilter远程host过滤器,不过多解释,可采用高性能的nginx来替换tomcat的实现。若感兴趣可以参考原文! RemoteIpFilter远程IP过滤器,不过多解释,可采用高性能的nginx来替换tomcat的实现。若感兴趣可以参考原文! RequestDumperFilter介绍该过滤器从请求和响应中获取详细信息,目的是方便调试。 警告:使用此过滤器有副作用这个过滤器输出包括请求的任何参数。该参数将使用默认的平台编码进行解码。任何后续调用request.setCharacterEncoding()在Web应用程序中不会有任何效果。 Filter Class Nameorg.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 Nameorg.apache.catalina.filters.SetCharacterEncodingFilter 初始化参数
WebdavFixFilter介绍微软操作系统有两个WebDAV客户端。一个是用于与端口80,另一个用于所有其他端口。试图与Tomcat的WebDAV的Servlet来交流的时候用端口80用于实现不坚持WebDAV规范和失败。该过滤器为此提供了一个修复通过强制使用WebDAV实现,通过端口80的连接。 Filter Class Nameorg.apache.catalina.filters.WebdavFixFilter *注意:tomcat版本Version 7.0.63 原文地址:https://tomcat.apache.org/tomcat-7.0-doc/config/filter.html (责任编辑:IT) |