我用容器管理的安全性编写了简单的应用程序.问题是当我登录并打开另一个我注销的页面时,然后我回到第一页,我点击任何链接等或刷新页面我得到这个例外.我想这是正常的(或者可能不是:))因为我退出了会话被破坏了.我该怎么做才能将用户重定向到例如index.xhtml或login.xhtml,并使他免于看到错误页面/消息?
换句话说,如何在我退出后自动将其他页面重定向到索引/登录页面?
这里是:
javax.faces.application.ViewExpiredException: viewId:/index.xhtml - View /index.xhtml could not be restored.
at com.sun.faces.lifecycle.RestoreViewPhase.execute(RestoreViewPhase.java:212)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
at com.sun.faces.lifecycle.RestoreViewPhase.doPhase(RestoreViewPhase.java:110)
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:312)
at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1523)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:343)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:215)
at filter.HttpHttpsFilter.doFilter(HttpHttpsFilter.java:66)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:256)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:215)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:277)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:188)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:641)
at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:97)
at com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:85)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:185)
at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:325)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:226)
at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:165)
at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:791)
at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:693)
at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:954)
at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:170)
at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:135)
at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:102)
at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:88)
at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:76)
at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:53)
at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:57)
at com.sun.grizzly.ContextTask.run(ContextTask.java:69)
at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:330)
at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:309)
at java.lang.Thread.run(Thread.java:619)
Run Code Online (Sandbox Code Playgroud) 我正在展示非常敏感的数据.用户从我的服务器注销后,我不希望其他用户能够看到数据点击浏览器的"后退"按钮.
我怎样才能做到这一点?
我有一个多页面的表单,也就是一个向导模式,其中Page 1对应于向导表单的第1步,第2页对应于第2步,等等.除了last之外的每个页面都有一个Next按钮,它带你到表格中的下一页.最后一页有一个提交按钮,提交向导中所有页面的所有数据.
我应该使用什么范围来维护每个表单上输入的数据的状态?例如,我应该使用View Scoped bean来保存所有页面上输入的所有数据吗?这将是有效的,因为我将导航到不同的页面(我认为这被认为是不同的"视图";如果它们是不同的视图,我相信当您导航到下一页时,View Scoped数据将会丢失魔法师)
我遇到以下情况:
场景:
在搜索时,支持bean会抛出异常,因为有很多null
值.原因是,当他们按下"搜索"时,页面处于RESTORE_VIEW
同步状态.
我尝试在页面上禁用缓存,强制用户刷新后退按钮上的页面,但是很多用户抱怨"为什么我不能使用后退按钮,我之前可以做到!" 由于他们认为应用程序在"确认表单重新提交"页面chrome/IE/Firefox show中崩溃,导致帮助台门票,因此管理人员希望我寻找替代方案.
我的问题:
可以检测RESTORE_VIEW的当前Phase_ID,而不是在此阶段进行任何处理以避免异常,但仅此一点,只需重新调整即可为用户提供部分页面视图.是否可以RENDER_RESPONSE
在此方案中放入页面然后进行处理?这应该刷新页面.
由于推荐(或普通/良好)实用是禁用动态页面上的缓存,我已经这样做了,并且必须重新教育顽固的用户.
但是我有以下问题.
当按下具有禁用缓存的页面上的"返回"按钮时,浏览器会显示"确认表单重新提交"(chrome),用户可以按Refresh / F5
或Enter
键.
如果Refresh/ F5
是动作,一切都可以,我检测到RESTORE_VIEW
相位并避免在该阶段中进行任何处理并让处理在RENDER_RESPONSE
阶段完成.但是,如果Enter
按下,则PhaseID处于,RENDER_RESPONSE(6)
但是几个下拉控件的值为null,这会导致页面失败.所以我进行检查以检测这些情况并显示FaceMessage以告诉用户刷新页面.
问题是,我可以强制页面刷新而不是强制用户这样做吗?此页面的导航案例格式为:
<navigation-rule>
<navigation-case>
<from-outcome>/app/ord/r1</from-outcome>
<to-view-id>/jsp/ordersHistory.jsp</to-view-id>
</navigation-case>
</navigation-rule>
Run Code Online (Sandbox Code Playgroud)
我已经看到在线代码片段faces-redirect=true
用于强制重新加载页面,但我无法让它工作!有什么建议?
经历了这些优秀的帖子:
在JavaEE6教程的中途,我仍然有以下问题:
谢谢