Filter登录验证案例

登录验证案例

需求:

  1. 访问day4_case案例的资源。验证其是否登录
  3. 如果登录了,则直接放行。
  4. 如果没有登录,则跳转到登录页面,提示"您尚未登录,请先登录"。

 

 

代码实现:

LoginFilter:

package com.example.web.filter;

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

/**
 * 登录验证的过滤器
 */
@WebFilter("/*")
public class LoginFilter implements Filter {
    @Override
    public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException, ServletException {
        //0.强制转换
        HttpServletRequest request = (HttpServletRequest) req;

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

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

    }

    @Override
    public void destroy() {

    }
}

 

posted @ 2023-01-29 17:02  monkey大佬  阅读(39)  评论(0)    收藏  举报