我遇到了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注销页面。 我该如何解决这个问题?