概述
功能介绍
HttpFirewall
是Spring Web
提供的一个接口,抽象建模HTTP防火墙
这一概念。相应对象用于拒绝存在潜在风险的请求或者包装它们以控制它们的行为。该接口的实现类对象会被注入到FilterChainProxy
,在安全过滤器链被调用之前该防火墙逻辑会被调用。如果响应对象的行为需要被限制,该防火墙也可以对响应进行包装再返回给请求方。
HttpFirewall
只定义了两个接口方法,分别对请求/响应对象进行包装。这两个方法都在FilterChainProxy
对请求调用过滤器链之前被调用。如果HttpFirewall
认为请求有风险,会抛出异常RequestRejectedException
从而拒绝该请求。而HttpFirewall
封装后的响应对象对设置响应头部方法,cookie
设置方法(对应头部Set-Cookie
),重定向方法(对应头部Location
设置)做了安全加强,确保相应值中不包含\r
或者\n
。
HttpFirewall
包装后的请求/相应对象分别是:FirewalledRequest
和FirewalledResponse
。
继承关系
使用介绍
Spring Web
框架自身对HttpFirewall
提供了两个实现类:DefaultHttpFirewall
和StrictHttpFirewall
。FilterChainProxy
缺省使用的是StrictHttpFirewall
。DefaultHttpFirewall
是个缺省实现,建议使用StrictHttpFirewall
而不是DefaultHttpFirewall
。
源代码
package org.springframework.security.web.firewall;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public interface HttpFirewall {
/**
* Provides the request object which will be passed through the filter chain.
*
* @throws RequestRejectedException if the request should be rejected immediately
*/
FirewalledRequest getFirewalledRequest(HttpServletRequest request)
throws RequestRejectedException;
/**
* Provides the response which will be passed through the filter chain.
*
* @param response the original response
* @return either the original response or a replacement/wrapper.
*/
HttpServletResponse getFirewalledResponse(HttpServletResponse response);
}
参考文章
Spring Security Web : Web安全过滤器链代理对象 FilterChainProxy
Spring Security Web : StrictHttpFirewall HTTP防火墙(严格模式)
Spring Security Web : DefaultHttpFirewall HTTP防火墙(缺省模式)