【问题标题】:Display message after logging out with JSF and Spring security使用 JSF 和 Spring 安全性注销后显示消息
【发布时间】:2014-09-17 06:41:46
【问题描述】:

我有一个带有登录和注销操作的应用程序。按下注销按钮后,我想重定向到登录页面并在此处显示面部消息,其中包含有关成功注销的信息。现在,我正在努力转发面孔消息。此消息不想显示在登录对话框中。你能给我任何提示或推荐另一种方式吗?我正在使用 JSF 2.1 和 Spring Security 4。我尝试过的:

退出方式

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>

春季安全

<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>

【问题讨论】:

    标签: redirect jsf-2 spring-security logout


    【解决方案1】:

    只是和参数注销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 错误。
    猜你喜欢
    • 2016-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-10
    • 2013-05-28
    • 1970-01-01
    • 1970-01-01
    • 2015-10-05
    相关资源
    最近更新 更多