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


//

    }
}
相关推荐
java—大象1 小时前
基于java+springboot+layui的流浪动物交流信息平台设计实现
java·开发语言·spring boot·layui·课程设计
ApiHug2 小时前
ApiSmart x Qwen2.5-Coder 开源旗舰编程模型媲美 GPT-4o, ApiSmart 实测!
人工智能·spring boot·spring·ai编程·apihug
魔道不误砍柴功2 小时前
探秘Spring Boot中的@Conditional注解
数据库·spring boot·oracle
杨哥带你写代码2 小时前
网上商城系统:Spring Boot框架的实现
java·spring boot·后端
camellias_2 小时前
SpringBoot(二十一)SpringBoot自定义CURL请求类
java·spring boot·后端
晴天飛 雪2 小时前
Spring Boot MySQL 分库分表
spring boot·后端·mysql
weixin_537590452 小时前
《Spring boot从入门到实战》第七章习题答案
数据库·spring boot·后端
Qi妙代码3 小时前
MyBatisPlus(Spring Boot版)的基本使用
java·spring boot·后端
《源码好优多》3 小时前
基于Java Springboot在线教育学习系统
java·spring boot·学习
宇宙超级勇猛无敌暴龙战神3 小时前
Springboot整合xxl-job
java·spring boot·后端·xxl-job·定时任务