JSF 使用 session.invalidate 注销不会清除当前用户名?

2023-11-26

在我的 JSF 应用程序中,我获取当前登录用户的名称,如下所示......

public String getLoggedInUsername() {
  return FacesContext.getCurrentInstance().getExternalContext().getRemoteUser();
}

...我检查用户是否像这样登录...

public boolean isSignedIn() {
  return (getLoggedInUsername() != null);
}

...当用户退出时,我这样做...

public String doLogout() {
  FacesContext facesContext = FacesContext.getCurrentInstance();
  HttpSession httpSession = (HttpSession)facesContext.getExternalContext().getSession(false);
  httpSession.invalidate();
  return "main";
}

我的问题是在 doLogout() 之后, getLoggedInUser name() 样式返回登录用户的名称。我应该做什么来确保 getRemoteUser() 在注销后返回 null ?

或者,是否有比仅检查用户名更好的方法来获取 if isSignedIn() ?

谢谢! 抢


确保在使会话无效后重定向请求。用户主体是根据会话属性解析的。因此,当您只是转发到目标页面时(就像 JSF 导航情况默认情况下所做的那样),它仍然会出现在目标页面中,因为它使用same HttpSession参考。重定向指示 Web 浏览器触发全新的 HTTP 请求,从而强制服务器重新创建HttpSession根据新的要求进行参考。

Add <redirect/>到导航案例以强制 JSF 发送重定向。或者当您已经使用 JSF 2.0 时,添加?faces-redirect=true到结果值。

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

JSF 使用 session.invalidate 注销不会清除当前用户名? 的相关文章

  • Jsf 生命周期 - 验证失败后渲染响应

    我希望 BalusC 或一位 JSF 专家能够帮助我了解 JSF 生命周期的细节 尤其是渲染 我很难理解的是 在渲染响应期间 从模型中获取值并将其显示给用户 现在 如果存在验证错误 则模型不会更新 因此渲染器必须向用户显示组件树中的无效值
  • 您可以在不同的 OSGi 包中拥有 JSF 自定义组件吗?

    有人同时使用过 OSGi 和 JSF 吗 我问这个问题是因为 JSF 使用类加载器魔法来查找自定义组件 来自教程 重点是我的 这个配置文件最终会 是 META INF faces config xml 中 代表此的 jar 文件 成分 JS
  • 我应该使用 Facelets“jsfc”属性吗?

    Facelets 使用jsfc属性将 HTML 元素转换为其关联的JSF成分 这对于快速原型设计非常有帮助 因为它允许您使用可视化设计工具创建视图 然而我最近发现this http weblogs java net blog 2008 12
  • JSF 2 全局异常处理,导航到错误页面未发生

    我正在开发一个基于 JSF 2 0 的 Web 应用程序 我正在尝试实现一个全局异常处理程序 每当发生任何异常 例如 NullPointerException ServletException ViewExpiredException 等
  • JSF 2.3 CDI 无法在 tomcat 上运行

    每当我使用 inject 时 我都会尝试在 tomcat 8 上设置 jsf 2 3 我一直遇到错误 我已经在 stackoverflow com 上进行了谷歌搜索和搜索 但我找不到解决方案 我已经按照这里的 BalusC 示例安装了 CD
  • JSF:初始请求和回发请求?

    请看一下 JSF 中的下面这行代码
  • 如何在jsf页面中嵌入java代码?

    我有 一个名为 LoginBean 的托管 bean 名为 login xhtml 的 JSF 页面 在这个 jsf 页面中 我有一个登录表单 在managebean 内部我有一个loginCheck 函数 public void logi
  • 如何使用p:ajax按顺序更新多个组件

    我正在尝试呈现以下 JSF 页面
  • RichFaces ExtendedTableDataModel:对列进行排序检索所有行

    我们使用 ExtendedTableDataModel 进行分页 这样做是为了使用 Hibernate 检索一组结果 并在请求另一个页面时加载下一组结果 一切正常 但如果我们在 rich dataTable 中使用 rich column
  • 两个 primefaces 日历组件验证

    我有一个表格JSF 2我使用双字段来指定日期范围 这样做的目的是不让用户选择第二个日期之前的第一个日期 所以我想在发送表单之前执行验证 使用p calendar成分 我所做的是将验证器绑定到第二个日历输入 以便在内部访问第一个组件并比较日期
  • 根据标签对 f:selectItems 列表进行排序

    我有一个包含值和标签的 selectItem 列表 数据是从数据库中获取的 selectItem 列表具有以下值 lt 1 100 500 gt lt 2 1000 1500 gt lt 3 500 1000 gt 这里 1 2 3 是 s
  • JSF h:列标记固定宽度

    有人可以告诉我如何使用 JSF 修复数据表中列的宽度吗 我的代码当前如下
  • 为什么 getSession() 在短时间内间隔的后续请求中不返回相同的会话?

    我正在发送一个 getJSON HTTP GET 请求两次 使用不同的数据 一次又一次 假设我们有 request1 和 request2 我可以在 FF 和 Chrome 的开发者工具中看到我有相同的cookie JSESSIONID F
  • 如何在 primefaces 媒体标签中重命名 PDF

    我在 primefaces 中使用流式内容并使用媒体标签来显示它 当在查看器中按下下载按钮时 它会下载名为dynamiccontent properties的文件 有什么办法可以重命名吗 我正在使用 html4 java 7 和 prime
  • 所有与 JSF 相关的 web.xml 上下文参数名称和值的概述 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 JavaServer Faces 有多种
  • 资源注入不适用于 glassfish 4,而查找可以工作

    我在应用程序范围托管 bean 中使用 glassfish 4 进行资源注入 但 glassfish 无法工作 而是使用默认的 derby 数据库 这是我的代码 Named value dbManager ApplicationScoped
  • 同时调用多个支持 bean 方法

    有没有办法从 JSF 中的不同支持 bean 调用多个方法 我有一个存储用户信息的应用程序 我有多个支持 bean 它们分为时间表 地址 电话等 当应用程序最初加载时 一切正常 但由于我的所有视图都是类型 ViewScope即使显示新用户
  • 如何检测当前的 JSF 版本?

    我正在开发 jsf webapp 现在我需要知道我正在使用什么 JSF 版本 我在哪里可以查到这个 提前致谢 您的意思是 以编程方式 你可以从Package getImplementationVersion http docs oracle
  • jsf 2.0 中看不见的注释? [复制]

    这个问题在这里已经有答案了 是否可以在我的 xhtml 文件中嵌入注释 这些注释仅显示在源代码中 而不显示在渲染结果中 我想在文件中包含作者 日期 但最终用户在生成的输出中不应该看到它们 如果我使用标准评论标签浏览器显示它们 将以下内容添加
  • 中止来自 jsf.ajax.addOnEvent() 的 JSF Ajax 请求

    我希望有一个中心位置来监视 ajax 请求并在某些情况下中止它们 我唯一不知道要做的一件事就是实际中止来自一个中央函数的 ajax 请求 我想象解决方案看起来像这样 jsf ajax addOnEvent function data if

随机推荐