java - Spring 安全 : Cannot call sendRedirect() after the response has been committed

标签 java spring web-services spring-security

<分区>

我正在使用以下代码进行注销:

public class LogoutHandler extends SimpleUrlLogoutSuccessHandler {


@Override
public void onLogoutSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication)
        throws IOException, ServletException {
    if(!response.isCommitted()) {
        String targetURL = "myUrl";
        response.setContentType(MediaType.TEXT_PLAIN_VALUE);
        response.getWriter().write(target);
        response.getWriter().flush();
        response.getWriter().close();
        getRedirectStrategy().sendRedirect(request, response, targetURL);
    }

 }

}

但是在调用/logout WS 时出现以下异常:

 java.lang.IllegalStateException: Cannot call sendRedirect() after the response has been committed
at org.apache.catalina.connector.ResponseFacade.sendRedirect(ResponseFacade.java:494)
at javax.servlet.http.HttpServletResponseWrapper.sendRedirect(HttpServletResponseWrapper.java:138)
at org.springframework.security.web.firewall.FirewalledResponse.sendRedirect(FirewalledResponse.java:26)
at javax.servlet.http.HttpServletResponseWrapper.sendRedirect(HttpServletResponseWrapper.java:138)

最佳答案

不,您不能在编写正文后使用 sendRedirect,因为那时响应是“已提交”的。

如果您想要使用自定义正文的重定向,您可以设置相当于在编写响应正文之前执行重定向:

response.setStatus(HttpServletResponse.SC_TEMPORARY_REDIRECT);
response.setHeader("Location", targetURL);

关于java - Spring 安全 : Cannot call sendRedirect() after the response has been committed,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35555976/

相关文章:

java - 在不知道 H2 数据库中的插入顺序的情况下断言预期的 DB 值

java - 根据数据库值动态加载 spring xml 文件

java - 批量分配不安全的绑定(bind)器配置 Rest 框架,JSON http 请求 :I am not using Spring MVC

未找到 Java 符号

java - 如何将额外的服务器库添加到 Openshift 上的 Tomcat(JBossEWS)?

java - 为什么我从下面的代码中收到错误java.util.NoSuchElementException?

mysql - 关闭与 mysql 和 spring boot 的 ssl 连接时的静默异常

.net - C# 中的动态 WSDL 实现

java - 从 Java 使用 SharePoint Web 服务时 NTLM 失败?

java - WebService 可与 Jetty 配合使用,但不适用于 Tomcat