Redirect 使用JSF和Spring security注销后显示消息
我有一个具有登录和注销操作的应用程序。按下注销按钮后,我想重定向到登录页面,并在此处显示faces消息,其中包含成功注销的信息。现在,我正在努力转发faces消息。此消息不希望显示在登录对话框中。你能给我一些提示或给我推荐另一种方法吗?我正在使用JSF2.1和SpringSecurity4。我所尝试的: 注销方法Redirect 使用JSF和Spring security注销后显示消息,redirect,jsf-2,spring-security,logout,Redirect,Jsf 2,Spring Security,Logout,我有一个具有登录和注销操作的应用程序。按下注销按钮后,我想重定向到登录页面,并在此处显示faces消息,其中包含成功注销的信息。现在,我正在努力转发faces消息。此消息不希望显示在登录对话框中。你能给我一些提示或给我推荐另一种方法吗?我正在使用JSF2.1和SpringSecurity4。我所尝试的: 注销方法 public String doLogout() throws ServletException, IOException { FacesContext facesContex
public String doLogout() throws ServletException, IOException {
FacesContext facesContext = FacesContext.getCurrentInstance();
ExternalContext externalContext = facesContext.getExternalContext();
HttpServletRequest request = ((HttpServletRequest) externalContext.getRequest());
RequestDispatcher dispatcher = request.getRequestDispatcher("/j_spring_security_logout");
dispatcher.forward((ServletRequest) externalContext.getRequest(), (ServletResponse) externalContext.getResponse());
facesContext.addMessage("", new FacesMessage("You have been successfully logged out."));
externalContext.getFlash().setKeepMessages(true);
FacesContext.getCurrentInstance().responseComplete();
return null;
}
登录XHTML
<h:form id="loginForm" prependId="false">
<p:dialog visible="true" resizable="false" closable="false" draggable="false" position="center">
<p:messages globalOnly="true" id="msgs"/>
<h:outputLabel for="j_username" value="User" />
<p:inputText id="j_username" required="true"/>
<h:outputLabel for="j_password" value="Password" />
<p:password id="j_password" required="true"/>
<p:commandButton icon="ui-icon-check"
id="login"
action="#{loginController.doLogin}"
oncomplete="handleLoginRequest(xhr, status, args)"
update="msgs"
ajax="false"/>
</p:dialog>
</h:form>
Spring security
<http auto-config="true" >
<intercept-url pattern="/pages/**"
access="ROLE_RA"/>
<form-login login-page="/pages/userLogin.xhtml"
default-target-url="/pages/specimens/specimenOverview.xhtml" />
<logout logout-success-url="/pages/userLogin.xhtml"/>
<session-management invalid-session-url="/pages/userLogin.xhtml">
<concurrency-control max-sessions="1"/>
</session-management>
</http>
要注销的url的名称和参数:
<logout logout-success-url="/pages/userLogin.xhtml?logout=true"/>
在登录页面上检查并显示您的消息:
<h:outputText value="Your logout message here" rendered="#{param['logout']}" />
感谢您的回复!在重定向和重新创建会话后,是否有可能更新消息标记?我想使用,因为造型和整体一致性。技术上它是可能的,但将是复杂的。想法是在托管bean中处理输入请求参数,并在这里设置JSF消息。是的,这也是我的想法。但是,如果我重定向到另一个页面并创建新会话,则在传输消息时会遇到问题。我尝试了externalContext.getFlash().setKeepMessages(true)代码>但没有成功。不,不一样,getFlash()仍然使用当前会话运行,注销后将终止当前会话。注销完成后,您需要使用新创建的会话发送消息。@AlexChernyshev这种解决方案很有效。在我的例子中,它确实会注销用户并显示一条成功消息,但是,用户不能使用同一页面重新登录。它给出http 408错误。