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);


//

    }
}
相关推荐
WZTTMoon10 分钟前
从 “完整对象” 视角看Spring 循环依赖
java·spring boot·后端·spring
是烟花哈2 小时前
后端开发CRUD实现
java·开发语言·spring boot·mybatis
半部论语3 小时前
MyBatis-Plus 通用 CRUD 实现原理技术文档
java·spring boot·mybatis
手握风云-3 小时前
JavaEE 进阶第六期:Spring Boot 如何重塑后端开发
java·spring boot·java-ee
Deamon Tree3 小时前
【设计题】如何实现一个线程安全的缓存?
java·spring boot·spring
java水泥工4 小时前
大学城水电管理系统|基于SpringBoot和Vue的大学城水电管理系统(源码+数据库+文档)
spring boot·vue·计算机毕业设计·大学生毕业设计·水电管理系统
星光一影4 小时前
基于Spring Boot电子签平台,实名认证+CA证书
大数据·spring boot·开源·vue·html5
小毅&Nora5 小时前
【后端】使用 Easy Rules 构建灵活的业务规则引擎 — Spring Boot 集成实践
java·spring boot·后端
昵称为空C5 小时前
SpringBoot基于注解的数据库字段回填方案
spring boot·spring
optimistic_chen6 小时前
【Java EE进阶 --- SpringBoot】Spring 核心 --- AOP
spring boot·笔记·spring·java-ee·aop·java注解