• 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);
    
    
    //
    
        }
    }
    
    
  • 相关阅读:
    react原理篇:组件性能优化(减轻state、使用纯组件PureComponent避免不必要的重新渲染)
    【羊了个羊】什么!第二关难如上青天,能不能简单版??
    分布式数据库Apache Doris简易体验
    nginx和feign负载均衡并不冲突
    光学数值孔径
    JavaScript基础
    通关算法题之 ⌈栈和队列⌋
    【0228】syslogger日志收集器工作原理【初始化配置参数篇】
    部署支持使用Redis哨兵模式,支持纳管ClickHouse数据库,JumpServer堡垒机v2.28.0发布
    DL-24C/2A电流继电器
  • 原文地址:https://blog.csdn.net/weixin_55639995/article/details/139455614