Filter案例登录验证分析和登录验证实现

Fitter-案例-登录验证-分析 

需求:

  1. 访问day17_case案例的资源。验证其是否登录

  2. 如果登录了,则直接放行。

  3. 如果没有登录,则跳转到登录页面,提示"您尚未登录,请先登录"

 

 Fitter-登录验证-代码实现 

复制代码
package com.example.day17_case.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 init(FilterConfig filterConfig) throws ServletException {
        Filter.super.init(filterConfig);
    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        //强制转换
        HttpServletRequest request = (HttpServletRequest) servletRequest;

        //获取资源请求路径
        String url = request.getRequestURI();

        //判断是否包含登录相关资源路径  要注意排除css,js,图片,验证码等资源
        if(url.contains("/long.jsp") || url.contains("/loginServlet") || url.contains("/css/") || url.contains("/js/") || url.contains("/fonts/") || url.contains("/checkCodeServlet")){
            //包含,用户就是想登录,放行
            filterChain.doFilter(servletRequest,servletResponse);
        }else {
            //不包含,需要验证用户是否登录
            //从获取session中获取user
            Object user = request.getSession().getAttribute("user");
            if (url!=null){
                //登录,放行
                filterChain.doFilter(servletRequest,servletResponse);
            }else{
                //没有登录,返回登录页面
                request.setAttribute("login_msg","您尚未登录,请登录");
                request.getRequestDispatcher("/login.jsp").forward(request,servletResponse);
            }
        }



    }

    @Override
    public void destroy() {
        Filter.super.destroy();
    }
}
复制代码

 

posted @   夫君  阅读(30)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示