• Springboot进行登录校验


    文章目录

    • 登录校验,使用过滤器
      • 在webFilter


    登录校验,使用过滤器

    在webFilter

    使用过滤器过滤所有的请求
    然后
    然后根据登录

    先生成令牌
    然后把令牌封装到前端
    然后前端拿到令牌进行封装

    然后再配置过滤器
    @WebFilter(urlPatterns = “/*”)

    urlPatterns="/*"是过滤请求
    但是登录接口要放行

    package com.healer.filter;
    
    import com.alibaba.fastjson.JSONObject;
    import com.healer.common.Result;
    import com.healer.utils.JwtUtils;
    import io.jsonwebtoken.Claims;
    import io.jsonwebtoken.SignatureAlgorithm;
    import lombok.extern.slf4j.Slf4j;
    import org.springframework.util.StreamUtils;
    import org.springframework.util.StringUtils;
    
    import javax.servlet.*;
    import javax.servlet.annotation.WebFilter;
    import javax.servlet.http.HttpFilter;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    
    /**
     * @author healer
     * @Description LoginCheckFilter
     * @data 2024-06-04 15:15
     */
    @WebFilter(urlPatterns = "/*")
    @Slf4j
    public class LoginCheckFilter implements Filter {
    
    
        @Override
        public void doFilter(ServletRequest req, ServletResponse resp, FilterChain filterChain) throws IOException, ServletException {
    //先拿到url地址
            HttpServletRequest request = (HttpServletRequest) req;
            HttpServletResponse response = (HttpServletResponse) resp;
            String url = request.getRequestURL().toString();
    //        判断url中的是否包含login 如果包含说明是登录操作 放行
            if (url.contains("login")) {//登录请求
                log.info("登录请求,直接放行");
                filterChain.doFilter(req, resp);
                return;
            }
    
    //      判断请求头中的令牌
            //        判读令牌是否存在,如果不存在返回错误信息
            String jwt = request.getHeader("token");
            if (!StringUtils.hasLength(jwt)) {
                log.info("jwt的令牌为空,返回错误结果");
                Result result = Result.error("NOT_LOGIN");
                String notLogin = JSONObject.toJSONString(result);
                response.getWriter().write(notLogin);
                return;
    
            }
    
    //
    //        解析token , 如果解析失败,那么返回未登录
    
            try {
                JwtUtils.parseJwt(jwt);
            } catch (Exception e) {
                e.printStackTrace();
    
                log.info("解析令牌出现错误");
                Result result = Result.error("NOT_LOGIN");
                String notLogin = JSONObject.toJSONString(result);
                response.getWriter().write(notLogin);
                return;
    
            }
            log.info("解析成功");
            filterChain.doFilter(request, response);
    
    
    //
    
        }
    }
    
    
  • 相关阅读:
    pandas plot函数:数据可视化的快捷通道
    数字信号处理——多速率信号处理(3)
    dpdk 网卡初始化 —— 收包
    learnopengl 中 pbr的球体算法
    ipython、jupyter 在代码执行前修改待执行的代码
    docker安装(持续更新中)
    vue 导入、导出模块的几种方式
    如何绕过api的防重放做安全测试
    c++最短路模型(抓住那头牛)
    Windows图形界面(GUI)-SDK-C/C++ - 列表框(List)
  • 原文地址:https://blog.csdn.net/weixin_55639995/article/details/139455614