javax.servlet.filter类中的请求/响应处理

时间:2012-01-15 05:32:58

标签: java java-ee servlet-filters

如何检测它是否是过滤器类要处理的请求/响应?此外,我需要取消对我的servlet的请求,并希望创建自己的响应并从dofilter方法返回它。有没有办法做到这一点?

2 个答案:

答案 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当前处理的内容(请求/响应)? 所以我只能在请求时进行会话验证。