[英]Xhtml pages and HttpSession test , no jstl?
我在Java EE中有一个带有JSF,Facelets,Richfaces的动态Web应用程序。 我的页面都是xhtml页面。 因此,JSTL无法使用。 为了使我的帐户页面和所有其他私有页面都可以访问,我想测试用户是否已连接,因此,如果HttpSession
的属性会话不为null。 如果为null,则会在欢迎页面中重定向用户。
我在xhtml页面中尝试过:
<jstl:if test="${sessionScope['session']==null}">
<jstl redirect...>
</jstl:if>-->
但由于它不是jsp页面,因此无法使用。 因此,我应该在哪里测试会话是否不为null以允许用户查看其私人页面? 在中央托管bean中?
正常的位置是Filter
。
创建一个implements
javax.servlet.Filter
的类,并在doFilter()
方法中编写以下逻辑:
if (((HttpServletRequest) request).getSession().getAttribute("user") == null) {
// Not logged in, so redirect request to login page.
((HttpServletResponse) response).sendRedirect("/login.jsf");
} else {
// Logged in, so just continue request.
chain.doFilter(request, response);
}
将这个过滤器映射到类似/private/*
, /secured/*
, /restricted/*
等的url-pattern
的web.xml
。
<filter>
<filter-name>loginFilter</filter-name>
<filter-class>com.example.LoginFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>loginFilter</filter-name>
<url-pattern>/private/*</url-pattern>
</filter-mapping>
如果/private
文件夹中有私人页面,则将调用此过滤器并相应地处理会话中已登录用户的状态。
请注意,我将属性名称session
重命名为user
因为这更有意义。 HttpSession
本身即已是会话。 对于其他开发人员检查/维护您的代码,这将变得过于模棱两可且令人困惑。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.