登录验证
代码验证
package com.itheima.web.filter;
import javax.servlet.*;
import javax.servlet.annotation.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import java.io.IOException;
/**
* 登录验证的过滤器
*/
@WebFilter("/*")
public class LoginFilter implements Filter {
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws ServletException, IOException {
// 要使用http中的session对象方法
// 要将ServletRequest对象类型强转为HttpServletRequest,才可以使用
HttpServletRequest req = (HttpServletRequest) request;
// 判断访问路径资源是否和登陆注册相关,相关的都放行(如果过滤掉了,这些登录
// 页面的图片资源将不会显示)
String[] urls = {"/login.jsp","/imgs/","/css/","/loginServlet","/register.jsp",
"/registerServlet","/checkCodeServlet"};
// 获取当前访问路径的资源
String url = req.getRequestURI().toString();
// 循环判断
for (String u : urls) {
if (url.contains(u)){
// 找到了
// 放行
chain.doFilter(request,response);
// 放行了之后,不执行后面的,把方法结束掉
return;
}
}
// 1. 判断session中是否有user
HttpSession session = req.getSession();
Object user = session.getAttribute("user");
// 2. 判断user是否为null
if (user != null) {
// 登录过了
// 放行
chain.doFilter(request, response);
}else {
// 没有登录,存储提示信息,跳转到登录页面
// 这里使用req,或者request都没有问题,我们只是将请求对象request进行了强转,没有改变里面的数据
req.setAttribute("login_msg","您尚未登录");
req.getRequestDispatcher("/login.jsp").forward(req,response);
}
}
public void init(FilterConfig config) throws ServletException {
}
public void destroy() {
}
}