Java 是否允许在转发后重定向请求?

Java 是否允许在转发后重定向请求?,java,servlets,redirect,spring-mvc,spring-security,Java,Servlets,Redirect,Spring Mvc,Spring Security,在某些情况下,我希望强制注销用户。我使用的是Spring安全性,我知道如何做到这一点的唯一方法是转发/重定向到/注销(或Spring为注销尝试而侦听的任何URL)。从理论上讲,用户可以阻止浏览器执行重定向,因此我宁愿转发到注销URL,因为执行注销逻辑非常重要。由于Spring总是在(取消)成功注销后执行重定向,我想知道这是否会是一个问题。那么,简言之,在请求已经被转发之后是否允许重定向,或者是否会导致非法状态异常 那么,简言之,在请求已经被转发之后是否允许重定向,或者是否会导致非法状态异常 不,

在某些情况下,我希望强制注销用户。我使用的是Spring安全性,我知道如何做到这一点的唯一方法是转发/重定向到/注销(或Spring为注销尝试而侦听的任何URL)。从理论上讲,用户可以阻止浏览器执行重定向,因此我宁愿转发到注销URL,因为执行注销逻辑非常重要。由于Spring总是在(取消)成功注销后执行重定向,我想知道这是否会是一个问题。那么,简言之,在请求已经被转发之后是否允许重定向,或者是否会导致非法状态异常

那么,简言之,在请求已经被转发之后是否允许重定向,或者是否会导致非法状态异常

不,绝对没问题。响应本身不知道转发-它完全发生在服务器的内部。转发只是一种将控制权从一个服务器组件内部转移到另一个服务器组件的机制


相比之下,重定向后通常无法转发,因为重定向“提交”响应,并且无法撤消该响应。

只有在提交响应时才会收到
非法状态异常。因此,如果转发的资源在重定向之前提交了响应,那么您将得到
IllegalStateException
。当响应头已经发送时,将提交响应。当您将一个字节写入响应体并刷新它时,可能会发生这种情况。重定向需要未提交的响应,因为重定向需要通过将
位置
标题设置为空白来完成


在一种体面的MVC方法中,JSP是响应的一部分,因此每当您通过scriptlet或JSTL从JSP内部发送重定向时,您都将面临非法状态异常的风险。但如果你在任何地方都不这样做,就没什么好担心的。

我明白了。谢谢你的解释!很好的解释。谢谢你,巴卢斯克!