如何检测它是否是过滤器类要处理的请求/响应?此外,我需要取消对我的servlet的请求,并希望创建自己的响应并从dofilter方法返回它。有没有办法做到这一点?
答案 0 :(得分:2)
每个过滤器都可以影响请求和响应中的任何一个,一个或两个。这一切都取决于你是否在调用chain.doFilter(...)
之前和/或之后做了任何事情 - 如果你传递了一个包装的请求和/或响应。
如果您需要在过滤器中创建自己的回复,只需不要调用chain.doFilter(...)
并从过滤器中提供您自己的回复。
请参阅Filter.doFilter
Javadocs,包括:
此方法的典型实现将遵循以下内容 图案:- 1.检查请求 2.(可选)使用自定义实现包装请求对象,以过滤输入过滤的内容或标头 3.(可选)使用自定义实现包装响应对象,以过滤内容或标头以进行输出过滤 4. a)使用FilterChain对象(chain.doFilter())调用链中的下一个实体, 4. b)或者不将请求/响应对传递给过滤器链中的下一个实体以阻止请求处理 5.在调用过滤器链中的下一个实体后直接在响应上设置标头。
答案 1 :(得分:0)
我使用response.getWriter()。write(“response data”)进行了mofied响应。 并通过删除chain.doFilter();
来避免传递给servlet的响应现在,我正在从doFilter方法验证会话变量(用于身份验证)。 由于请求和响应都在相同的doFilter方法中处理,我认为这些会话验证发生了2次(1。),同时请求发生& (2)响应时。 但是,如何找到doFilter当前处理的内容(请求/响应)? 所以我只能在请求时进行会话验证。