我有一个使用 spring saml 和 Modsecurity 的基于 Java-Servlet 的 Web 应用程序。
对于其中一个 GET 请求(URL - /saml/login),响应是返回为 text/html 的 HTML 页面(我可以在浏览器网络工具中读取 html 文件)以及 Content-Length 标头。这是 Modsecurity 被禁用的时候。
当我在应用程序中启用 ModSecurity 时,将返回相同的响应,并带有标头 Transfer-encoding: chunked。这次 html 响应由于分块而被编码。例如<html
显示为10<60h104t116m109l108
。我不确定浏览器是否应该对此进行解码,但这破坏了我的应用程序的流程。由于响应以编码形式显示在浏览器上。
我尝试在 ModSecurity 中注释掉规则,以找出导致响应被分块但没有成功的原因。由于另一个开发人员实现了 ModSecurity,此时我不确定如何通过更改 ModSecurity 来解决这个问题。
因此,我想尝试在 Java 代码或浏览器中解码响应。如果 Html 文件渲染正常,后续的请求就会开始工作。
编辑1:
web.xml 中的 ModsecurityFilter 配置:
<filter>
<filter-name>ModSecurityFilter</filter-name>
<filter-class>org.modsecurity.ModSecurityFilter</filter-class>
<init-param>
<param-name>conf</param-name>
<param-value>/opt/ModSecurityFilter/modsecurity.conf</param-value>
</init-param>
<init-param>
<param-name>libxml2</param-name>
<param-value>/usr/lib/x86_64-linux-gnu/libxml2.so.2</param-value>
</init-param>
<init-param>
<param-name>libpcre</param-name>
<param-value>/lib/x86_64-linux-gnu/libpcre.so.3</param-value>
</init-param>
<init-param>
<param-name>libaprutil-1</param-name>
<param-value>/usr/lib/x86_64-linux-gnu/libaprutil-1.so.0</param-value>
</init-param>
<init-param>
<param-name>libapr-1</param-name>
<param-value>/usr/lib/x86_64-linux-gnu/libapr-1.so.0</param-value>
</init-param>
<init-param>
<param-name>libModSecurityJNI</param-name>
<param-value>/opt/ModSecurityFilter/java/.libs/libModSecurityJNI.so</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>ModSecurityFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>