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

本文介绍了一个基于Java Servlet的登录过滤器(LoginFilter)实现,该过滤器通过检查请求路径和会话状态来控制用户访问,确保只有已登录用户才能访问受保护的资源。未登录用户将被重定向至登录页面。
摘要由CSDN通过智能技术生成

分析:
因为需要使用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);
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值