Springboot中JWT登录校验及其拦截器实现方法

 更新时间:2025年11月17日 11:04:19   作者:程序陆  
这篇文章主要介绍了Springboot中JWT登录校验及其拦截器实现方法的相关资料,包括引入Maven坐标、获取Token、JWT拦截器的实现和配置,通过这些步骤可以实现后端对用户登录的身份校验,需要的朋友可以参考下

前言

这篇我们主要实现后端对用户登录的身份校验,是web项目核心功能之一。

后续会有springboot整合各个功能的文章,同时也会有前端的相关知识,希望能给web开发学习者提供帮助~

一、JWT是什么?

JWT(JSON Web Token)是一种基于 JSON 的轻量级开放标准(RFC 7519),用于在网络应用间安全地传递声明信息。它通过数字签名确保信息的完整性和真实性,常被用于身份验证和数据交换场景。

二、实现步骤

1.引入Maven坐标

在pom.xml中引入Maven坐标:

        <dependency>
            <groupId>com.auth0</groupId>
            <artifactId>java-jwt</artifactId>
            <version>3.10.3</version>
        </dependency>

2.获取Token

封装一个静态函数用来生成token。在service层用户登录信息匹配成功后,可以调用该函数,来获取Token,同时把Token密钥返回给前端。

    public static String getToken(String userId, String password){

        long EXPIRE_TIME = 60 * 60 * 1000;  //过期时间 60 分钟
        Date date = new Date(System.currentTimeMillis() + EXPIRE_TIME);
        String token = JWT.create().withAudience(userId) // 将 userId 保存到 token 里面
                .withExpiresAt(date) //60分钟后token过期
                .sign(Algorithm.HMAC256(password));  //使用用户id和password进行token生成
        return token;  //返回加密后的token密钥

    }

3.JWT拦截器的实现

public class JwtInterceptor implements HandlerInterceptor {
    @Autowired
    private UserService userService;

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {

        //通过预检请求
       if(request.getMethod().equals("OPTION")){
           return true;
       }
       //从请求头中获取Token,xxx为前端请求头中value为Token密钥的key
       String token = request.getHeader("xxx");
        // 如果不是映射到方法直接通过
        if(!(handler instanceof HandlerMethod)){
            return true;
        }
        //ServiceException是自定义的异常
        if(token == null){
            throw new ServiceException(Constants.CODE_401,"请登录");
        }

        String userId;
        try {
            //对Token密钥进行解密,获取用户id
            userId = JWT.decode(token).getAudience().get(0);
        } catch (JWTDecodeException j) {
            //Token密钥有误,无法解密
            throw new ServiceException(Constants.CODE_401,"请登录");
        }

        //通过解密后获取的用户id进行数据库查询,判断是否有该id的用户
        User user = userService.getUser(userId);
        if (user == null) {
            //没有该用户
            throw new ServiceException(Constants.CODE_401,"请登录");
        }
        //获取从数据库查询出来的用户密码,对前端带过来的Token密钥进行进一步验证
        JWTVerifier jwtVerifier = JWT.require(Algorithm.HMAC256(user.getPassword())).build();
        try {
            jwtVerifier.verify(token);
        } catch (JWTVerificationException e) {
            //Token密钥有误
            throw new ServiceException(Constants.CODE_401,"请登录");
        }


        return true;
    }
}

4.JWT拦截器配置

@Configuration
public class InterceptorConfig implements WebMvcConfigurer {
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        //"/user/login","/xxx","/yyy/**" 为JWT拦截器不拦截,直接放行的接口
        registry.addInterceptor(jwtInterceptor())
        .addPathPatterns("/**").excludePathPatterns("/user/login","/xxx","/yyy/**");
    }

    @Bean
    public JwtInterceptor jwtInterceptor(){
        return new JwtInterceptor();
    }
}

总结

以上实现了后端对用户登录的身份校验,希望对未来的高级工程师们起到帮助,谢谢啦~

到此这篇关于Springboot中JWT登录校验及其拦截器实现的文章就介绍到这了,更多相关Springboot JWT登录校验及拦截器内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 利用Jasypt如何对Spring Boot配置文件加密

    利用Jasypt如何对Spring Boot配置文件加密

    这篇文章主要给大家介绍了关于利用Jasypt如何对Spring Boot配置文件加密的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-07-07
  • 深入解析Java中的Class Loader类加载器

    深入解析Java中的Class Loader类加载器

    这篇文章主要介绍了Java中的类加载器,是Java入门学习中的基础知识,需要的朋友可以参考下
    2016-03-03
  • JavaWeb文件上传流程

    JavaWeb文件上传流程

    这篇文章主要介绍了JavaWeb文件上传流程,JavaWeb中最重要的技术之一,下文关于其文件上传的流程分享,需要的小伙伴可以参考一下
    2022-05-05
  • MybatisPlus中@TableLogic注解的使用实现

    MybatisPlus中@TableLogic注解的使用实现

    @TableLogic注解是MyBatis-Plus框架中用于处理逻辑删除的注解,逻辑删除是一种常见的删除策略,其中并不真正删除数据记录,而是通过修改某个标记字段的值来表示记录已经被删除,方便以后恢复或者审计,感兴趣的可以了解一下
    2025-10-10
  • Spring Boot Swagger3常用注解详解与实战指南

    Spring Boot Swagger3常用注解详解与实战指南

    Swagger是一个用于设计、构建、文档化和使用RESTful Web服务的开源工具,Swagger3是Swagger的最新版本,它提供了许多新功能和改进,这篇文章主要介绍了Spring Boot Swagger3常用注解详解与实战指南的相关资料,需要的朋友可以参考下
    2025-10-10
  • Spring的@Transactional注解使用详细解析

    Spring的@Transactional注解使用详细解析

    这篇文章主要介绍了Spring的@Transactional注解使用详细解析,@Transactional 注解相信大家并不陌生,平时开发中很常用的一个注解,它能保证方法内多个数据库操作要么同时成功、要么同时失败,需要的朋友可以参考下
    2023-11-11
  • Java中使用异或语句实现两个变量的互换

    Java中使用异或语句实现两个变量的互换

    这篇文章主要介绍了Java中使用异或语句实现两个变量的互换,本文直接给出代码实例以及运行结果,需要的朋友可以参考下
    2015-06-06
  • JavaWeb开发之使用jQuery与Ajax实现动态联级菜单效果

    JavaWeb开发之使用jQuery与Ajax实现动态联级菜单效果

    这篇文章主要介绍了JavaWeb开发之使用jQuery与Ajax实现动态联级菜单效果的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2016-10-10
  • Spring IOC控制反转的实现解析

    Spring IOC控制反转的实现解析

    这篇文章主要介绍了Spring IOC控制反转的实现,IOC是Spring的核心思想之一,它通过将对象的创建、依赖注入和生命周期管理交给容器来实现解耦,使开发者能够更专注于业务逻辑的实现,需要的朋友可以参考下
    2025-02-02
  • spring boot 本地图片不能加载(图片路径)的问题及解决方法

    spring boot 本地图片不能加载(图片路径)的问题及解决方法

    这篇文章主要介绍了spring boot 本地图片不能加载(图片路径)的问题,解决的办法其实很简单,只要写一个配置文件,也就是图片位置的转化器,原理是虚拟一个在服务器上的文件夹,与本地图片的位置进行匹配。需要的朋友可以参考下
    2018-04-04

最新评论