当前位置: 首页 > 面试题库 >

从支持bean导航到外部URL?

闾丘冠玉
2023-03-14
问题内容

我正在尝试为我的Java EE / JSF2应用程序实现正确的注销。

它需要两件事:

  1. 我需要从JAAS中注销并使会话无效
  2. 然后,我必须导航到外部URL以触发Siteminder注销

Siteminder注销URL(在策略服务器上配置->我无法更改)在应用程序上下文之外。例如。如果我的Web应用程序URL为https://
localhost:8080 / sm /
MyWebApp,

则注销URL为https:// localhost:8080
/ anotherwebapp /
logout.html。

这是当前的本地注销代码:

public void logout() {
    System.out.println("Logging out...");
    HttpServletRequest request = (HttpServletRequest)FacesContext.getCurrentInstance().getExternalContext().getRequest();
    try {
        request.logout();
    } catch (ServletException e) {
        e.printStackTrace();
    }
    HttpSession session = (HttpSession)FacesContext.getCurrentInstance().getExternalContext().getSession(false);
    if (session != null) {
        session.invalidate();
    }
}

这是产生注销URL的属性:

public String getLogoutUrl() {
    HttpServletRequest request = (HttpServletRequest)FacesContext.getCurrentInstance().getExternalContext().getRequest();
    String requestServer = request.getServerName();
    String requestScheme = request.getScheme();
    int serverPort = request.getServerPort();
    String logoutUrl = requestScheme + "://" + requestServer + ":" + Integer.toString(serverPort) + "/anotherwebapp/logout.html";
    return logoutUrl;
}

但是,我找不到可以调用logout()然后打开外部URL的JSF2 / Primefaces组件。例如,如果我有:

<h:outputLink value="#{authBean.logoutUrl}" onclick="#{authBean.logout()}">[Logout]</h:outputLink>

那么似乎未调用onclick。

我尝试的另一种方法是将外部URL放到注销函数的末尾,以使其作为导航字符串返回,但无法识别(也尝试使用“?faces-redirect = true”
…)。

任何帮助,将不胜感激。


问题答案:

您可以创建一个页面logout.xhtml,因此代码如下所示:

public String getLogoutUrl() {
    return "/logout.jsf";
}

并在页面中添加:

<META HTTP-EQUIV="Refresh" CONTENT="0;URL=https://localhost:8080/anotherwebapp/logout.html">


 类似资料:
  • 此页面包含来自 Booyant 和 linkerd 用户的关于 linkerd 的博客和谈话。 通过 Buoyant的博客 查看更多的帖子! 注: 详细列表请见原文(没有翻译的必要): https://linkerd.io/overview/external-resources/

  • 基本上,我的项目是一场战争(MyProject),导入2罐,MyProject-Client和MyProjectJar-API 我的项目 MyProjectJar-API - 有一个接口 MyProject-Client -想要注入在MyProject上生成的ParametroService 我想知道是否可以将ParameterService(在MyProject上生成)注入MyProject客户

  • 我想支持全屏导航UI,如下所示: https://medium.com/androiddevelopers/windowinsets-listeners-to-layouts-8f9ccc8fa4d1 https://developer.android.com/guide/navigation/gesturenav 虽然我的应用程序的所有活动都运行良好,但我突然碰到了一个有问题的问题,它有一个带有

  • 接下来我们将添加外部认证支持。这真的很简单,因为你所需要的实际上只是一个 ASP.NET Core 兼容的认证中间件。 ASP.NET Core 自身已经承载了对 Google,Facebook,Twitter,Microsoft 账户 以及 OpenID Connect 的支持。另外你可以在 这里 找到更多其他的认证提供程序。 添加 Google 支持 为了能够使用 Google 进行身份验证,

  • BottomBar有4个目的地:ScreenA,ScreenB,ScreenC和ScreenD。 在ScreenA上按下按钮(不是底部栏项)时,我想使用参数转到ScreenB。 导航图 底部栏 到目前为止,单击ScreenA上的按钮会将我导航到ScreenB,但参数值始终为0,因为我永远不会传递在lambda中传递的参数。我使用的是compose_version='1.2.0-alpha04'和"

  • 我有一个关于底部导航栏的奇怪问题,虽然我花了大量时间在它上面,但我无法解决。当我以“推荐”的方式(从许多教程中)使用它时,它就是无法导航。 那么,我所说的“推荐”方式是什么意思呢:我有一个单独的acticity,其中有一个名为“MainActivity”的navHostFragment。这个主要活动有一个XML布局文件,我将底部导航栏放在其中。BottomNavigationBar还有一个XML布