代码编织梦想

员工管理模块

完善登录功能:

提示:过滤器在未登录前拦截主页里面内容

例如:

1. 完善登录功能代码实现

在这里插入图片描述

2. 过滤器具体逻辑实现

在这里插入图片描述

3 在启动类中间加入注解@ServletComponentScan

4 写过滤器

filter.LoginCheckFilter.java

package com.baidu.reggie.filter;

import com.alibaba.fastjson.JSON;
import com.baidu.reggie.common.R;
import lombok.extern.slf4j.Slf4j;
import org.springframework.util.AntPathMatcher;

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

@Slf4j
@WebFilter(filterName = "LoginCheckFilter",urlPatterns = "/*")
public class LoginCheckFilter implements Filter {
   //路径通配符
   public static final AntPathMatcher PATH_MATCHER = new AntPathMatcher();
   @Override
   public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
       HttpServletRequest request = (HttpServletRequest) servletRequest;
       HttpServletResponse response =(HttpServletResponse)  servletResponse;

       //过滤器具体的处理逻辑如下:

       //1、获取本次请求的URI
       String requestUrl = request.getRequestURI();
       log.info("本次请求的URI{}",requestUrl);
       //写出不用处理的请求
       String[] urls = new String[]{
         "/employee/login",
         "/employee/logout",
         "/backend/**",
         "/front/**"
       };

       //2、判断本次请求是否需要处理
       boolean check =  check(urls,requestUrl);
       //3、如果不需要处理,则直接放行
       if (check){
           log.info("拦截到请求{},不需要处理",request.getRequestURI());
           filterChain.doFilter(request,response);
           return;
       }
       //4、判断登录状态,如果已登录,则直接放行
       if (request.getSession().getAttribute("employee")!=null){
           log.info("用户已登录,用户id为{}",request.getSession().getAttribute("employee"));
           filterChain.doFilter(request,response);
           return;
       }
       //5、如果未登录则返回未登录结果
       log.info("用户未登录");
      response.getWriter().write(JSON.toJSONString(R.error("NOTLOGIN")));
   }

   //路径匹配
   public boolean check(String[] urls,String requestUrl){
       for (String url: urls) {
           boolean match =  PATH_MATCHER.match(url,requestUrl);
           if (match==true){
               return true;
           }
       }
       return false;

   }
}

在里面穿插日志进行测试

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/xiaoxuya_cc/article/details/129671502