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


//

    }
}
相关推荐
顽疲1 小时前
SpringBoot + Vue 集成阿里云OSS直传最佳实践
vue.js·spring boot·阿里云
摇滚侠2 小时前
Spring Boot3零基础教程,Kafka 小结,笔记79
spring boot·笔记·kafka
摇滚侠2 小时前
Spring Boot3零基础教程,自定义 starter,把项目封装成依赖给别人使用,笔记65
数据库·spring boot·笔记
刘一说2 小时前
Spring Boot 主程序入口与启动流程深度解析:从 `@SpringBootApplication` 到应用就绪
java·spring boot·后端
熊小猿5 小时前
如何在 Spring Boot 项目中使用 @Slf4j 注解结合 Logback 进行系统日志管理
java·开发语言·spring boot
Good kid.6 小时前
一键部署 Deepseek网页聊天系统(基于 Spring Boot + HTML 的本地对话系统)
spring boot·后端·html
CodeAmaz6 小时前
SpringBoot两级缓存实现
spring boot·spring·缓存
勇往直前plus6 小时前
学习和掌握RabbitMQ及其与springboot的整合实践(篇一)
spring boot·学习·spring cloud·rabbitmq·java-rabbitmq
lang201509286 小时前
Spring Boot与K8s集成的核心机制
spring boot·后端·kubernetes