环境


Richfaces 3.3.3
JSF 1.2
Siteminder


需求

用户输入所需的申请地址。 Siteminder拦截并询问用户名和密码。客户端提供凭据。客户使用应用程序,然后单击注销/退出按钮。应用程序销毁会话并将302重定向到相同的应用程序地址,Siteminder应该再次拦截。

问题

我正在尝试从从siteminder登录的richfaces应用程序中注销。注销后,而不是转到siteminder的登录页面,它返回到应用程序的主页。似乎是在杀死应用程序会话,而不是siteminder会话。有没有办法注销siteminder?



public String logout() {
    ExternalContext ec = FacesContext.getCurrentInstance().getExternalContext();
    HttpSession session = (HttpSession)ec.getSession(false);

    if (session != null) {
        session.invalidate();
    }

    try {
        String redirectPath = "https://abcd.xyz.com/context/start.jsf";
        ec.redirect(redirectPath);
    } catch (IOException e) {
        e.printStackTrace();
    }

return null;


记录

com.ibm.ws.webcontainer.servlet.ServletWrapper doDestroy SRVE0253I [主机名] [/上下文] [uri]:成功销毁。
com.ibm.ws.webcontainer.servlet.ServletWrapper初始化SRVE0242I [主机名] [/上下文] [uri]:初始化成功。

最佳答案

如果标头中的SM_USER值为null / empty,我将在servletfilter中使用以下代码来强制执行重定向。

if(servletPath.trim().equals("/login/logout.do")){
                    log.debug("User Logged Out. Redirecting to " + contextPath + homeLink);
                    RequestDispatcher rd = request.getRequestDispatcher(homeLink);
                    rd.forward(request, response);
                    return;
                }

关于jsf - JSF Siteminder注销,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7937070/

10-10 08:10