正常的地方是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);
}
将此过滤器映射到诸如, ,等之类的东西web.xml
上。url-pattern
/private/*
/secured/*
/restricted/*
<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
本身即已经是会话。对于其他检查/维护您的代码的开发人员来说,这将过于模棱两可和令人困惑。