【问题标题】:JSF and j_security_check connectionJSF 和 j_security_check 连接
【发布时间】:2011-08-18 13:55:50
【问题描述】:

我有一个 .xhtml 页面,我在其中尝试了 BalusC 的建议 here 以及以下内容,但没有避免 OP's issue

  <meta http-equiv="refresh" content="#{session.maxInactiveInterval}"/>

基本上,我启动应用程序并呈现基于表单的身份验证页面。然后我等待会话时间到期。如果我在那之后尝试登录,则会出现OP's problem

【问题讨论】:

  • 你能确认页面确实被meta refresh标签刷新了吗?您能否确认content 属性包含一个合理的值并且确实是以秒为单位的会话超时?在浏览器中右键单击页面并选择查看源代码
  • 很抱歉提出问题的方式很混乱 - 下次会做得更好。在检查了我的 login.jsp 后,我发现我放置的位置错了!我现在有 我再次感谢如此迅速的反应。在 login.jsp 和 index.xhtml 中的以下内容 我可以确认这现在可以确保 login.jsp 被刷新并且当会话在 index.xhtml 上过期,然后呈现 login.jsp。
  • 我将其转发为答案。但是我想知道您是否了解 JSP 和 Facelets 之间的区别...您之前曾问过一个非常相似的问题:stackoverflow.com/questions/7098831/… 我希望很清楚 ${pageContext.session} 只能在 JSP 中使用,@987654328 @ 仅在 Facelets 中,而 Facelets 是 JSP 的继承者(因此根本不应该使用 JSP,因为它现在是一种古老的视图技术)。

标签: java jsf security


【解决方案1】:
<meta http-equiv="refresh" content="#{session.maxInactiveInterval}"/>

#{session} 仅在 Facelets 中可用。它不起作用表明您没有将 Facelets 用于此特定视图,而是它的旧版前身 JSP 甚至普通的普通 HTML。

对于 JSP,您应该使用 ${pageContext.session} 来获取会话,正如我对您自己发现的问题的回答中所展示的那样。

<meta http-equiv="refresh" content="${pageContext.session.maxInactiveInterval}"/>

或者,更好的是,完全摆脱遗留的 JSP 并用其后续的 Facelets 替换它。

【讨论】:

  • 好的,谢谢 BalusC。我是 JSF 的新手,来自 JSP 背景。我现在明白了,以后不会浪费任何人的时间。我将看看用 .xhtml 替换 login.jsp 和 loginerror.jsp 页面是否适用于我的特定用例。
  • 不客气。它应该像将.jsp 重命名为.xhtml 一样简单,将&lt;%@taglib prefix="x" uri="uri"&gt; 替换为xmlns:x="uri" 等等。哦,老式的scriptlets 在Facelets 中不起作用,但这只是一个好方法事情:)
猜你喜欢
  • 1970-01-01
  • 2014-02-25
  • 2014-02-28
  • 2010-09-12
  • 2013-05-21
  • 2012-12-03
  • 2015-03-09
  • 2014-01-04
  • 1970-01-01
相关资源
最近更新 更多