Jasig Cas Logout在JSF应用程序中无法正常工作

时间:2013-09-18 08:52:39

标签: jsf logout cas response.redirect jasig

我遇到了jasig cas logout的问题。当我尝试在下面调用logout方法时,我得到了这个错误:

HTTP Status 500 - Cannot create a session after the response has been committed. javax.servlet.ServletException: Cannot create a session after the response has been committed

public String logout() {

Logger logger = Logger.getLogger(this.getClass().getName());

    ExternalContext extCtx = FacesContext.getCurrentInstance()
            .getExternalContext();

    HttpServletResponse response = (HttpServletResponse) extCtx
            .getResponse();

    String casLogoutURL = extCtx.getInitParameter("casLogoutURL");

    String serverName = extCtx.getInitParameter("serverName");

    try {

        extCtx.invalidateSession();
        logger.debug("Session Destroyed!");

        response.sendRedirect(casLogoutURL + "?service="
                + URLEncoder.encode(serverName, "UTF-8"));

        logger.debug("Logging out user...");

    } catch (IOException e) {
        logger.error("Impossible execute redirect after logout - CAS URL SERVER UNREACHABLE");
        e.printStackTrace();
    }

    return null;
}

Logger logger = Logger.getLogger(this.getClass().getName()); ExternalContext extCtx = FacesContext.getCurrentInstance() .getExternalContext(); HttpServletResponse response = (HttpServletResponse) extCtx .getResponse(); String casLogoutURL = extCtx.getInitParameter("casLogoutURL"); String serverName = extCtx.getInitParameter("serverName"); try { extCtx.invalidateSession(); logger.debug("Session Destroyed!"); response.sendRedirect(casLogoutURL + "?service=" + URLEncoder.encode(serverName, "UTF-8")); logger.debug("Logging out user..."); } catch (IOException e) { logger.error("Impossible execute redirect after logout - CAS URL SERVER UNREACHABLE"); e.printStackTrace(); } return null; }

据我所知,重定向函数不会破坏生命周期,因此返回后将处理调用页面。 我想破坏会话并转到CAS注销页面。 我该如何解决这个问题?

0 个答案:

没有答案