gpt4 book ai didi

jsf-2 - 注销后重定向失败并出现 java.lang.IllegalStateException : Cannot create a session after the response has been committed

转载 作者:行者123 更新时间:2023-12-04 06:00:06 25 4
gpt4 key购买 nike

我有一个 JSF2 应用程序。我有一个 session 范围的登录 bean 和一个 View 范围的注销 bean。当我登录时,我使用重定向,它工作正常。但是,注销失败并重定向。如果我在没有重定向的情况下注销它就可以了。

@ManagedBean
@ViewScoped
public class MbLogout extends BaseJsf {
private static final long serialVersionUID = 2992671241358926373L;

public String logout() throws DfException {
getFacesContext().getExternalContext().invalidateSession();

//return "login?faces-redirect=true"; // fails with this
return "login";
}
}

登录页面绑定(bind)到登录 bean,所以我怀疑这可能与它有关,尽管我不明白为什么它不起作用。错误是:
java.lang.IllegalStateException: Cannot create a session after the response has been committed

我的猜测是它试图在登录页面上创建一个 session ,因为我访问了 session bean,尽管我没有看到任何问题,并且它无需重定向即可工作。

我正在使用 MyFaces 2.1。

最佳答案

我建议使用 Servlet 而不是 bean 进行注销,托管 bean(尤其是 View 范围)不适合注销。例如:

@WebServlet(name = "LogoutServlet", urlPatterns = {"/logout"}) // Can be configured in web.xml aswell
public class LogoutServlet extends HttpServlet {

private static final String redirectURL = "http://www.somepage.com";

@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// Destroys the session for this user.
if (request.getSession(false) != null) {
request.getSession(false).invalidate();
}
response.sendRedirect(redirectURL );
}
}

关于jsf-2 - 注销后重定向失败并出现 java.lang.IllegalStateException : Cannot create a session after the response has been committed ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9017487/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com