如何使用java过滤器(filter)进行登陆验证?

分析:
因为需要使用request方法中的getRequestURI()获取资源请求路径,Filter里的request是ServletRequest类型的而getRequsetURI()方法是HttpServletRequest类型的。所以首先需要强制转换。之后,就判断一下是否初始化页面时可以放行,如果未登录用户要访问登陆后才能查看的信息,就跳转到登陆页面,提示用户先登陆,最后再判断是否登录即可。登录了就放行,登录不成功跳转登录页面。

import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;

 @WebFilter("/*")
 public class LoginFilter implements Filter {
   public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
    //强制转换
    HttpServletRequest request=(HttpServletRequest)req;

    //获取资源请求路径
     String uri=request.getRequestURI();
     
     //判断是否包含登录相关资源路径,要注意排除掉css,js,验证码等资源
    if (uri.contains("/login.jsp")||uri.contains("/loginServlet")||uri.contains("/css/")||uri.contains("/js/")||uri.contains("/fonts")||uri.contains("/image/")||uri.contains("/checkCode")){
 
        //包含放行
        chain.doFilter(req, resp);
    }else {
    
        //不包含,跳转登陆页面
        //从session中获取user
        Object user=request.getSession().getAttribute("user");
        if (user!=null){
 
            //登录了放行
            chain.doFilter(req, resp);
        }else{
        
            //没有登陆,跳转登陆页面
            request.setAttribute("login_msg","您尚未登录,请登录");
            request.getRequestDispatcher("/login.jsp").forward(request,resp);
        }
    }
}

你可能感兴趣的:(如何使用java过滤器(filter)进行登陆验证?)