从支持 bean 导航到外部 URL?

2023-12-15

我正在尝试为我的 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”...)。

任何帮助,将不胜感激。


你也可以只使用ExternalContext#redirect().

public void logout() throws ServletException, IOException {
    ExternalContext ec = FacesContext.getCurrentInstance().getExternalContext();
    ((HttpServletRequest) ec.getRequest()).logout();
    ec.invalidateSession();
    ec.redirect("http://example.com/anothercontext/logout");
}

不需要带有元刷新的中间页面。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从支持 bean 导航到外部 URL? 的相关文章

随机推荐

  • C++中删除指针

    背景 我正在努力理解指针 几周前我们在学校才看到它们 今天练习时我遇到了一个愚蠢的 问题 这对你来说可能非常简单 但我几乎没有编程经验 我在 SO 中看到了很多关于删除指针的问题 但它们似乎都与删除类而不是 简单 指针 或任何正确的术语 有
  • JavaScript - 通过 JavaScript 访问网络选项卡 [重复]

    这个问题在这里已经有答案了 我需要访问 例如 Chrome 开发者工具网络选项卡JavaScript 我只需要 1 源名称 第 1 列 和2 类型 第 3 列 但我完全不知道该怎么做 非常感谢链接 提前致谢 我做了一些研究 但似乎你做不到
  • 列表视图中的居中文本

    我发现不可能将文本在列表视图中居中 尝试在几乎所有内容上尝试wrapp content和layout gravity center 但文本不会移动 这是我的班级代理Eco package com blabla import java tex
  • 如何通过void指针访问成员

    首先尝试编写一个小程序将基本算术翻译成英语 最后我构建了一个二叉树 这不可避免地非常不平衡 来表示求值的顺序 首先 我写了 struct expr typedef struct unsigned char entity flag posit
  • 通过ObjectOutputStream发送文件然后用Java保存它?

    我有这个简单的服务器 客户端应用程序 我试图让服务器通过 OutputStream FileOutputStream OutputStream ObjectOutputStream 等 发送文件 并在将其保存到实际文件之前在客户端接收它 问
  • 'this' 绑定到订阅函数而不是 Angular2 中的外部组件范围

    我在 Angular2 中的一个组件中遇到了问题 因为 this 在我的组件之一中绑定到了错误的上下文 我有其他组件没有发生此问题 但我看不出有什么区别 这是我的代码 成分 import Component Input from angul
  • python闭包中的cell_contents

    python 中的 cell contents 对闭包的调用是否发生了变化 我知道 func closure 不起作用并且 closure works func closure cell contents Traceback most re
  • 带有逻辑或的 IF 语句[重复]

    这个问题在这里已经有答案了 if 1 2 4 cout lt lt True else cout lt lt False 我就是这样读到上面的内容的 如果 1 等于 2 或 4 则打印 true 否则 打印 false 当执行此操作时 tr
  • Hadoop 2.4 无法执行目标 org.apache.maven.plugins:maven-antrun-plugin:1.7

    我正在尝试从源代码安装 Hadoop 2 4 0 出现以下错误 我用 google 搜索但找不到任何解决方案 请帮忙 Regards 操作系统 Ubuntu 12 04 64 位 Java java版本 1 6 0 45 协议 版本 lib
  • Django ORM - 具有不同选择子句的分组聚合

    假设我们有 Django ORM 模型Meetup具有以下定义 class Meetup models Model language models CharField speaker models CharField date models
  • 如何在 MISRAC:2012 中创建遵循 Dir 4.12 和 4.8 的模块?

    此问题涉及遵循 MISRAC 2012 指南的 ISO C99 编码 我正在寻找有关 Dir 4 8 如果指向结构或联合的指针在翻译单元内从未取消引用 则应隐藏对象的实现 以及 Dir 4 12 不应使用动态内存分配 的指导 在 C 中实现
  • 如何使用 ImageMagick 将 SVG 转换为 PNG?

    我有一个定义大小为 16x16 的 SVG 文件 当我使用 ImageMagick 的转换程序将其转换为 PNG 时 我得到一个 16x16 像素的 PNG 它太小了 convert test svg test png 我需要指定输出 PN
  • 如何使自定义状态discord.py

    为什么我的代码不起作用 bot event async def on ready print Bot is now working await bot change presence activity discord CustomActiv
  • 数据库字段中的枚举存储

    最好存储枚举value或枚举name在数据库表字段中 例如 我应该将 TJLeft 存储为字符串还是数据库中的等效值 Public Enum TextJustification TJLeft TJCenter TJRight End Enu
  • 为什么更新“浅”复制字典不会更新“原始”字典? [复制]

    这个问题在这里已经有答案了 在阅读文档时dict copy 它说它制作了字典的浅表副本 我正在关注的书 Beazley s Python Reference 也是如此 书中写道 m copy 方法使浅 a 中包含的项目的副本 映射对象并将它
  • 如何解决由 ImageIO 插件引起的 OutOfMemoryError 错误?

    在工作中 我们有一些 Tomcat 服务器运行多个 Web 应用程序 其中大约一半必须执行一些图像处理 在进行图像处理之前 这些网络应用程序会执行以下操作ImageIO scanForPlugins 将适当的图像读取器和写入器放入内存中 虽
  • webservice.php Vtiger 更新查询字符串 php curl post

    有谁知道如何正确格式化 vtiger 中的更新查询以更新潜在客户模块下的记录 我一直在关注这个 http community vtiger com help vtigercrm developers third party app inte
  • Android Inbuild(ActionImageCapture) 意图返回 null 意图。无法传递结果 {who= null}

    我正在使用默认相机意图来获取应用程序中的图像 问题是相机返回 nullonActivityResult The ResultCode and RequestCode正在按预期返回 我的意图是 private static final int
  • 在Python中编写函数只保存最后一个字符串(Python)

    我正在 Python 中使用 nltk 进行 pos 标记 下面的代码在打印时工作得很好 import nltk import pos tag import nltk tokenize import numpy f open r C Use
  • 从支持 bean 导航到外部 URL?

    我正在尝试为我的 Java EE JSF2 应用程序实现正确的注销 它需要两件事 我需要从 JAAS 注销并使会话无效 然后我必须导航到外部 URL 才能触发 Siteminder 注销 Siteminder 注销 URL 在策略服务器上配