后端登陆的过滤器

luo9tian / 2024-01-19 / 原文

后端登陆的过滤器


package com.itheima.filter;
import com.google.gson.Gson;
import com.google.gson.JsonObject;
import com.itheima.pojo.Result;
import com.itheima.utils.JwtUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.configurationprocessor.json.JSONObject;
import org.springframework.util.StringUtils;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@Slf4j
@WebFilter(urlPatterns="/*")
public class DemoFilter implements Filter {
    public void init(FilterConfig filterConfig) throws ServletException {  //初始化方法只调用一次
        Filter.super.init(filterConfig);
        System.out.println("初始执行");
    }
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain chain) throws IOException, ServletException {
        System.out.println("执行前逻辑");
//        放行没有这句会没有数据
        HttpServletRequest request=(HttpServletRequest) servletRequest;
        HttpServletResponse response=(HttpServletResponse) servletResponse;
        String url=request.getRequestURL().toString();
        if(url.contains("login")||url.contains("Login")||url.contains(".html")){
            log.info("登录");
            chain.doFilter(servletRequest,servletResponse);
            return ;
        }
        String jwt=request.getHeader("Token");
        if(!StringUtils.hasLength(jwt)){
            log.info("未登录");
            Result error=new Result().error("Not_Login");
            String notLogin= new Gson().toJson(error);
            response.getWriter().write(notLogin);
            return ;
        }
        try {
            JwtUtils.parseJwt(jwt);
        } catch (Exception e) {
            log.info("解析令牌出错");
            e.printStackTrace();
            Result error=new Result().error("Not_Login");
            String notLogin= new Gson().toJson(error);
            response.getWriter().write(notLogin);
            return ;
        }
        System.out.println(jwt);
        log.info("令牌合法");
        chain.doFilter(servletRequest,servletResponse);
        System.out.println("执行后逻辑");
    }
    @Override
    public void destroy() {  //销毁方法只调用一次
        Filter.super.destroy();
        System.out.println("销毁执行");
    }
}