我是JSF的新手,我想了解为什么页面重定向和页面转发不会产生相同的安全渲染。
我有一个调用支持方法的JSF按钮:
<h:form>
<!-- content... -->
<p:commandButton action="#{login.play}" ... />
</h:form>
登录托管bean
public String play() {
...
//forward implementation
return "play";
}
public String play() {
...
//redirect implementation
return "play?faces-redirect=true";
}
我的页面play.xhtml
已受到保护。只有角色admin
或user
可以访问它,但使用我的第一个play
方法,安全约束未启用,我可以访问。为什么会有所不同?
答案 0 :(得分:5)
安全性基于每个请求执行。前向重用当前请求对不同视图的响应。重定向会创建一个全新的请求,其响应将用于不同的视图。您可以通过查看浏览器地址栏中的请求URL轻松查看。如果是前锋则保持不变。
在一个不相关的说明中,通过POST导航是不好的做法。您应该有条件地在同一页面中显示结果,或者使用普通链接或在POST后通过重定向进行GET导航。