需求:
1. 访问day17_case案例的资源。验证其是否登录
判断Session是否有user
2. 如果登录了,则直接放行。
3. 如果没有登录,则跳转到登录页面,提示"您尚未登录,请先登录"。
注意:排除登录相关的资源,直接放行,否则会出现页面死循环BUG
如 登录相关的静态资源,Servlet,JSP页面等
javax.servlet.Filter
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
// 0.强制转换
HttpServletRequest request = (HttpServletRequest) servletRequest;
// 1.获取资源请求的路径
String uri = request.getRequestURI();
// 2.判断是否是登录相关的资源
if (uri.contains("/login.jsp") ||
uri.contains("loginServlet") ||
uri.contains("/checkCodeServlet") ||
uri.contains("/css/") ||
uri.contains("/js/") ||
uri.contains("/fonts/")) {
// 让用户登录的入口
filterChain.doFilter(servletRequest, servletResponse);
} else {
// 其他资源需要验证用户是否登录
Object user = request.getSession().getAttribute("user");
if (user != null) {
filterChain.doFilter(servletRequest, servletResponse);
} else {
request.setAttribute("error_msg", "请登录");
request.getRequestDispatcher("/login.jsp").forward(servletRequest, servletResponse);
}
}
}