当前位置: 首页 > news >正文

Filter过滤器+JWT令牌实现登陆验证

一、背景

        我们需要在客户端访问服务器的时候给定用户一定的操作权限,比如没有登陆时就不能进行其他操作。如果他需要进行其他操作,而在这之前他没有登陆过,服务端则需要将该请求拦截下来,这就需要用到过滤器,过滤器可以完成一些登录校验、统一编码处理、敏感字符处理等操作。

二、分析

三、实现 

3.1 准备工作:JWT令牌实现登陆校验-CSDN博客

3.2 准备依赖:在pom.xml中添加以下依赖:这个包可以快速将object对象转成json格式。

        <dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.76</version></dependency>

3.3 目录结构:新建filter包以及包下LoginFilter类 

 

3.4  LoginFilter.java:注意必须添加@WebFilter(urlPatterns = "/*"),这是Java中过滤器的标记

package com.bytedance.filter;
import com.alibaba.fastjson.JSONObject;
import com.bytedance.pojo.Result;
import com.bytedance.utils.JwtUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.util.StringUtils;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@Slf4j
@WebFilter(urlPatterns = "/*") // 注意这里必须要添加
public class LoginFilter implements Filter {@Overridepublic void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {HttpServletRequest req = (HttpServletRequest) request;HttpServletResponse resp = (HttpServletResponse) response;// 1.获取请求的urlString url = req.getRequestURL().toString();log.info("请求的url:{}",url);// 2.判断url中是否包含login,如果包含则放行if (url.contains("login")){log.info("登陆操作,放行");chain.doFilter(request, response);return;}// 3.获取请求头中的令牌String jwt = req.getHeader("token");// 4.判断令牌是否存在if (!StringUtils.hasLength(jwt)){log.info("请求头为空,返回未登录信息~");Result error = Result.error("NOT_LOGIN");// 手动转换 对象->json 引入阿里巴巴fastjson依赖String noLogin = JSONObject.toJSONString(error);resp.getWriter().write(noLogin);return;}// 5.令牌存在,校验try {JwtUtils.parseJWT(jwt);}catch (Exception e){ // jwt解析失败e.printStackTrace();log.info("解析令牌失败,返回未登录错误信息");Result error = Result.error("NOT_LOGIN");// 手动转换 对象->json 引入阿里巴巴fastjson依赖String noLogin = JSONObject.toJSONString(error);resp.getWriter().write(noLogin);return;}// 6.放行log.info("放行");chain.doFilter(request,response);}
}

 3.5 启动类:除此之外,在启动类中必须添加注解:@ServletComponentScan

http://www.lryc.cn/news/313866.html

相关文章:

  • SQL学习十八~十九
  • 2024 AI 辅助研发的新纪年
  • 【牛客】HJ87 密码强度等级 CM62 井字棋
  • 【论文速读】 | DeGPT:通过大语言模型优化反编译器输出
  • 【DP】蓝桥杯第十三届-费用报销
  • 15. C++泛型与符号重载
  • 老司机都懂的!【打赏】完美运营的最新视频打赏系统
  • JavaWeb笔记 --- 二、Maven
  • 【C++】C++11---右值引用和移动语义
  • 消息队列-kafka-消息发送流程(源码跟踪) 与消息可靠性
  • 机器学习笔记 计算机视觉中的测距任务常见技术路线
  • 云计算 3月8号 (wordpress的搭建)
  • 【CSS】(浮动定位)易忘知识点汇总
  • Vitual Box虚拟机打开后,键盘鼠标失效
  • 宠物空气净化器值得入手吗?选购宠物空气净化器关注哪些方面?
  • 前端发起请求,后端模型需处理很久,怎样设置前端直接完成请求响应,后端计算完在返回结果给前端?
  • DDD领域驱动设计
  • 网络编程第1天
  • Springboot--整合Logback 日志框架(Maven)
  • 【考研数学】李林《880》vs 李永乐《660》完美使用搭配
  • Java面试之消息中间件
  • 网工学习 DHCP配置-接口模式
  • 【GO】语言特点 | Go和Java的对比
  • USB2.0设备检测过程信号分析
  • Go语言物联网开发安科瑞ADW300/4G电能表数据上传mqtt平台-电表接线到传输数据完整流程
  • LabVIEW质谱仪开发与升级
  • SwiftUI之DragGesture
  • 主网NFT的发布合约
  • 分享2024年在家轻松兼职赚钱的5个副业
  • 电脑小问题:Windows更新后黑屏