【发布时间】:2016-10-04 01:10:27
【问题描述】:
我正在尝试将 Sniffy 分析器添加到 JSF 项目中。
根据documentation web.xml 需要使用以下过滤器进行更新:
<filter>
<filter-name>sniffer</filter-name>
<filter-class>io.sniffy.servlet.SnifferFilter</filter-class>
<init-param>
<param-name>inject-html</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>enabled</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>sniffer</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
但是 web.xml 已经包含一个过滤器:
<filter>
<filter-name>Character Encoding Filter</filter-name>
<filter-class>org.primefaces.titan.filter.CharacterEncodingFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>Character Encoding Filter</filter-name>
<servlet-name>Faces Servlet</servlet-name>
</filter-mapping>
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.jsf</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.xhtml</url-pattern>
</servlet-mapping>
当嗅探器过滤器被添加(并且工作正常)字符编码过滤器停止工作(字符是乱码)。
web.xml 应该如何让两个过滤器都工作?
【问题讨论】:
-
过滤器按照它们在 web.xml 中声明的顺序被调用。问题表明 Sniffy 过滤器在字符编码过滤器有机会设置请求编码之前访问请求有效负载。逻辑解决方案是将字符编码过滤器的映射放在 Sniffy 过滤器之前。
-
@BalusC 在嗅探器产生相同结果之前声明字符编码过滤器(字符是乱码)。在这种情况下,过滤器的顺序似乎没有区别。
-
您能显示从您的服务器返回的 Content-Type 标头的值吗?你可以在浏览器的开发者工具中查看
-
@bedrin Content-Type 的值如下:
Content-Type:"text/html;charset=UTF-8"
标签: servlets web.xml servlet-filters sniffy