Springboot进行登录校验

文章目录

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

登录校验,使用过滤器

在webFilter

使用过滤器过滤所有的请求

然后

然后根据登录

先生成令牌

然后把令牌封装到前端

然后前端拿到令牌进行封装

然后再配置过滤器

@WebFilter(urlPatterns = "/*")

urlPatterns="/*"是过滤请求

但是登录接口要放行

java 复制代码
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);


//

    }
}
相关推荐
谁在黄金彼岸3 小时前
Spring Boot + WebFlux 全面使用指南
spring boot
希望永不加班3 小时前
SpringBoot 主启动类解释:@SpringBootApplication 到底做了什么
java·spring boot·后端·spring
智能工业品检测-奇妙智能3 小时前
国产化系统的性价比对比
人工智能·spring boot·后端·openclaw·奇妙智能
SmartBrain5 小时前
Spring Boot的高性能技术栈的工程实践
spring boot·后端·架构
dreamxian5 小时前
苍穹外卖day09
java·spring boot·tomcat·log4j·maven
q5431470876 小时前
VScode 开发 Springboot 程序
java·spring boot·后端
学习要积极6 小时前
Springboot图片验证码-EasyCaptcha
java·spring boot·后端
yuyu_03046 小时前
畜牧(牛)数字化管理系统系统概要
spring boot
波波七6 小时前
SSM与Springboot是什么关系? -----区别与联系
java·spring boot·后端
计算机学姐6 小时前
基于SpringBoot的校园二手书籍交易系统【个性化推荐+数据可视化统计+我买到的+我卖出的】
vue.js·spring boot·后端·mysql·信息可视化·intellij-idea·mybatis