Discuss / Java / chain.doFilter(request, wrapper);是当下游的所有filter都完成后再返回吗

chain.doFilter(request, wrapper);是当下游的所有filter都完成后再返回吗

Topic source

Deler

#1 Created at ... [Delete] [Delete and Lock User]

前面课程的代码都是把 chain.doFilter(request, wrapper) 写在最后面,但这次写在了中间,且注释为

“让下游组件写入数据到伪造的Response”

那么,这里的chain.doFilter的作用是等待下游所有filter还是只是下游第一个filter的完成呢?

肯定是所有,研究一下责任链模式。

廖雪峰

#3 Created at ... [Delete] [Delete and Lock User]

如果缓存存在,直接写入response,并没有调用chain.doFilter(),所以后续所有filter和servlet都不会被调用。

如果缓存不存在,先调用chain.doFilter(),后续所有filter和servlet在此调用内,返回后拿到结果,再写入真正的response。

filter顺序很重要,cache-filter应该放在chain的最后一个,即 filter1 -> filter2 -> ... -> cacheFilter -> servlet

否则那些权限检查的filter就可能执行不到。


  • 1

Reply