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


//

    }
}
相关推荐
IT_Octopus2 分钟前
Spring Boot 实战:@PostConstruct + Caffeine 缓存初始化与定时刷新
spring boot·后端·缓存
zb200641203 小时前
Laravel7.x十大核心特性解析
spring boot·后端·laravel
他们叫我阿冠4 小时前
Day5学习--SpringBoot详解
spring boot·后端·学习
vx-程序开发6 小时前
基于机器学习的动漫可视化系统的设计与实现-计算机毕业设计源码08339
java·c++·spring boot·python·spring·django·php
逍遥德9 小时前
Java编程高频的“技术点”-01:自定义全局异常处理器
java·开发语言·spring boot·后端
小旭95279 小时前
商品详情实现与缓存问题(穿透、击穿、雪崩)解决方案
java·数据库·spring boot·后端·缓存
杨运交10 小时前
[021][数据模块]基于`BaseEnum`的统一枚举处理方案:序列化与 JPA 转换实践
spring boot
彭于晏Yan11 小时前
TransmittableThreadLocal原理及作用
spring boot·后端
彭于晏Yan11 小时前
OkHttp 与 RestTemplate 技术选型对比
java·spring boot·后端·okhttp
谷哥的小弟13 小时前
图文详解Spring Boot整合MyBatis(附源码)
spring boot·mysql数据库·mybatis·java框架