java响应正在提交,doFilter链已断开
为了做到这一点,我需要:
关于blah.com/test
的请求
- ServletFilter A-创建配置文件,然后调用
chain.doFilter
- ServletFilter B(由于url模式不匹配而被跳过)
- Servlet-更改配置文件,
repsonse.setStatus
&response.addHeader("Location", target)
- ServletFilter A-应基于配置文件创建cookie
实际发生的情况:
- ServletFilter A-创建配置文件,然后调用
chain.doFilter
- ServletFilter B(由于url模式不匹配而被跳过)
- Servlet-更改配置文件,
repsonse.setStatus
&response.addHeader("Location", target)
- 重定向已提交,ServletFilter A未完成任务
我认为这可能与您可以在ServletFilter配置中设置的dispatcher值有关
有什么想法吗
# 1 楼答案
我认为,当响应到达
ServletFilter A
时Step 4
,它就被提交了。一旦响应被提交,即头被写入客户端,您就不能执行需要添加头的操作。添加cookie之类的操作如果希望在
Step 4
之前不提交响应,请尝试包装HttpServletResponse
并返回自定义输出流,该流缓冲数据直到到达step 4
,然后提交响应以下是示例代码:
# 2 楼答案
它很好用。无论如何,需要注意的是,为了防止缓冲响应大小小于8KB,除非在调用
getWrapperBytes()
之前刷新响应,否则它将无法工作这是由于ServletAPI的内部实现