Spring JSF2:如何使浏览器返回按钮不用于缓存页面并进行某种刷新/重定向?

Spring JSF2:如何使浏览器返回按钮不用于缓存页面并进行某种刷新/重定向?,spring,jakarta-ee,jsf-2,navigation,prettyfaces,Spring,Jakarta Ee,Jsf 2,Navigation,Prettyfaces,我使用JSF2.2和prettyfaces。 我想防止与浏览器向后功能相关的安全问题 要恢复应用程序中我的页面之间的导航链接,请执行以下操作: 我有一个使用SpringSecurity完成的登录页面,它在连接后重定向到主页。 主页位于ViewScope中。 从这个主页,我可以转到ViewScoped中的AddPatientPage和SessionScoped中的AddAnalyzeSepage 当用户在AddP*页面上时,如果他单击浏览器后退按钮,我不想使用缓存页面。我想对页面进行某种重定向/刷

我使用JSF2.2和prettyfaces。 我想防止与浏览器向后功能相关的安全问题

要恢复应用程序中我的页面之间的导航链接,请执行以下操作: 我有一个使用SpringSecurity完成的登录页面,它在连接后重定向到主页。 主页位于ViewScope中。 从这个主页,我可以转到ViewScoped中的AddPatientPage和SessionScoped中的AddAnalyzeSepage

当用户在AddP*页面上时,如果他单击浏览器后退按钮,我不想使用缓存页面。我想对页面进行某种重定向/刷新。我希望主页使用初始值,因为它是第一次加载

我正在尝试应用这个,但没有成功。。。例如,当我从Add*页面返回主页时,SelectOne菜单中的值不是初始值,而是最后选择的值。所以我相信现金还在使用。。。在测试之前,我从浏览器中清除了缓存文件

谢谢你的帮助

正如前一篇文章中的BalusC一样,我不使用注释,而是直接引用web.xml中的过滤器,如上所述

<filter>
     <filter-name>noCacheFilter</filter-name>
     <filter-class>com.clb.genomic.lyon.servletFilter.NoCacheFilter</filter-class>
</filter>
<filter-mapping>
     <filter-name>noCacheFilter</filter-name>
     <url-pattern>*.jsf</url-pattern>
    <url-pattern>*.xhtml</url-pattern>
</filter-mapping>

noCacheFilter
com.clb.genomic.lyon.servletFilter.NoCacheFilter
noCacheFilter
*.jsf
*.xhtml
*编辑:

使用不同的词,问题是当我使用后退按钮时,页面组件的值与其支持bean的值不同。所以我不明白哪些是被跟踪的,哪些不在范围之内

*EDIT2:

好的,我放弃了ajax调用。ajax调用的思想是,当您在SelectOneMenu中从第一个表单中选择一个值时,然后使用另一个SelectOneMenu和commandButton将结果注入到另一个表单中,以将所有值一起发送。这是一个混乱的处理向后按钮兼容性。所以现在我把两个selectOneMenu放在一个没有ajax的独特形式中,它工作得很好…后退按钮和selectOneMenu的bean和页面值之间的同步没有问题


我希望有人理解我的意图:)

如果您使用的是PrettyFaces,则筛选器配置将无法按预期工作。通常,您会有一些漂亮的URL(例如
/home
),然后将其转发到真正的JSF URL(例如
/home.JSF

使用您发布的配置,筛选器将不会应用于转发的请求。您必须按如下方式更新配置:

<filter>
     <filter-name>noCacheFilter</filter-name>
     <filter-class>com.clb.genomic.lyon.servletFilter.NoCacheFilter</filter-class>
</filter>
<filter-mapping>
   <filter-name>noCacheFilter</filter-name>
   <url-pattern>*.jsf</url-pattern>
   <url-pattern>*.xhtml</url-pattern>
   <dispatcher>REQUEST</dispatcher>
   <dispatcher>FORWARD</dispatcher>
</filter-mapping>

noCacheFilter
com.clb.genomic.lyon.servletFilter.NoCacheFilter
noCacheFilter
*.jsf
*.xhtml
要求
向前地

您正在使用
@ViewScoped
bean来管理页面,但是当执行JSF导航步骤时,这种bean会被删除(意味着从操作方法返回非null或空字符串)。然而,SpringSecurity并不是这样工作的,因为它有自己的POST方法,所以您不能确保在访问应用程序时将其删除。我建议您采取两种解决方法:将其设置为请求范围,以使托管bean成为无状态的,或将其设置为会话范围,并确保在用户登录应用程序时清除所有数据。我不确定问题是否来自Spring安全性(事实上可能…),只是为了澄清,系统连接工作良好。每次登录时,我都会被重定向到主页,并且一些选择菜单的值很好。它不跟踪旧的行为。当我从主页导航到另一个页面并尝试通过后退按钮返回主页时,问题就出现了。但是是的,有一个Spring安全过滤器,我需要进一步研究一下。但是我无法更改我的HomePageScope,因为我正在对它进行ajax调用。因此,我被绊倒了。如果我使用SessionScope,它会工作,我会保持bean和页面的值同步。很酷,但问题是在我的页面上,我在@PostConstruct annoted函数中请求数据库显示一些数据。当我使用addparticipant页面添加一些参与者时,由于会话范围的限制,主页上的数据不再刷新。(我需要注销以查看添加的数据)它正在使用ViewScoped,但是我在向后导航和使用ajax Stuff的selectOneMenu init时遇到了这个问题。Chrome会抛出一个错误并让我手动刷新页面。我怎么能这样想呢?这是因为您需要确保过滤器拦截转发分派类型。