如何使用特定参数过滤请求:例如仅使用“csrf-token”参数名称过滤请求。过滤器将首先检查请求是否具有所需的参数名称,并在没有所需参数的情况下绕过那些。
以下是我设置 web.xml 文件的方法,但问题是所有请求都已过滤:
<filter>
<filter-name>CSRFTest</filter-name>
<filter-class>org.example.CSRFFilter</filter-class>
<init-param>
<param-name>csrf_token</param-name>
<param-value>csrf</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CSRFTest</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter>
<filter-name>CrossSiteScriptStripper</filter-name>
<filter-class>CrossSiteScriptStripperFilter</filter-class>
</filter>
<!-- Apply the CrossSiteScriptStripper filter to all servlets and JSP pages. -->
<filter-mapping>
<filter-name>CrossSiteScriptStripper</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
pb2q给出的答案正在处理我的 TEST PROJECT ,但是当我插入真实项目时出现错误。我想问一下是否可以使用2个过滤器?
答案 0 :(得分:3)
您的Filter
课程将在doFilter
方法中收到ServletRequest
:这类似于常规servlet的service
方法(或doGet
,{{ 1}},用于doPost
)。
在HTTPServlet
方法中,使用doFilter
检查所需参数的请求:如果参数不存在,则该方法将返回ServletRequest.getParameter
如果参数不存在,则阻止请求:不要使用null
将其传回过滤器链。
伪代码:
FilterChain.doFilter
我不确定您对配置文件中的params有什么期望,但是如果要在请求中指定哪个 HTTP查询参数,则可以使用此config / code combo:
public void doFilter(ServletRequest req, ServletResponse resp,
FilterChain chain)
{
// ...
if (req.getParameter(MY_PARAMNAME) != null)
chain.doFilter(req, resp);
// otherwise don't call doFilter
// ...
}
然后在您的<param-name>required_parameter_name</param-name>
<param-value>csrf-token</param-value>
方法中:
init