public class UseFilter implements Filter {
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
// 获取用户信息
// 1. 获取session
HttpServletRequest req = (HttpServletRequest) request;
HttpSession session = req.getSession();
// 2. 从session中获取用户信息
Object user = session.getAttribute("user");
// Object user = ((HttpServletRequest) request).getSession().getAttribute("user");
// 判断用户是否登录
if (user == null) {
// 用户未登录 —— 跳转到登录页面
// 跳转路径
// String path = "";
// 1. 使用请求转发
// request.getRequestDispatcher(path).forward(request, response);
// 2. 使用请求重定向
// ((HttpServletResponse) response).sendRedirect(path);
} else {
// 用户已经登录 —— 放行
chain.doFilter(request, response);
}
}
}
需要注意的几点
- ServletRequest 对象不能直接获取 Session,需要先强制类型转换为 HttpServletRequest 对象,再使用 getSession() 方法获取 HttpSession ;
- 如果用户未登录,就需要进行页面跳转,跳转到注册登录页面,此时使用请求转发和请求重定向都可,看是否在跳转的页面中需要目前页面的数据选择跳转方式。