简短的问题:是否可以进行重定向,例如当用户未登录时,当呈现页面时?
为此你should http://java.sun.com/products/servlet/Filters.html use a Filter http://java.sun.com/javaee/5/docs/api/javax/servlet/Filter.html.
E.g.
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws ServletException, IOException {
if (((HttpServletRequest) request).getSession().getAttribute("user") == null) {
((HttpServletResponse) response).sendRedirect("error.jsf"); // Not logged in, so redirect to error page.
} else {
chain.doFilter(request, response); // Logged in, so just continue.
}
}
这里我假设User
正如您通常所期望的那样,已将其放置在会话范围内。它可以是一个会话范围的 JSF 托管 bean,名称为user
.
导航规则不适用,因为在正常情况下无法执行“bean 操作”GET
要求。在即将构造托管 bean 时执行重定向也行不通,因为当在正常情况下构造托管 bean 时,GET
请求,响应已经开始呈现,这是一个点没有回报(它只会产生IllegalStateException: response already committed
)。 PhaseListener 既麻烦又令人难以承受,因为您实际上不需要侦听任何 JSF 阶段。您只想监听“普通”HTTP 请求以及会话范围内某个对象的存在。为此,过滤器是完美的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)