springboot整合jwt

简介: springboot整合jwt

目的


一般系统都有登陆和验证用户是否登陆的需求,现在的项目好多都是前后端分离的,一般的session也不适合于多台机器同时提供服务的场景,所以可以使用jwt生成token,然后使用token来鉴定该用户是否登陆/登陆是否过期等。


优缺点


优点


  • 生成token简单,可以携带简单信息


  • 验证方便,不需要数据库等二次验证


缺点


  • 一旦签发就不受服务端控制


  • 想要更新必须生成一个新的token


代码


pom引入


有两种用的比较多的jwt,大家自选一下,以下两种选用一种即可,我用的是java-jwt


        <dependency>
            <groupId>com.auth0</groupId>
            <artifactId>java-jwt</artifactId>
            <version>3.18.2</version>
        </dependency>
    <dependency>
            <groupId>io.jsonwebtoken</groupId>
            <artifactId>jjwt</artifactId>
            <version>0.9.1</version>
        </dependency>


生成jwt


    public String generateNewJwt(User user) {
        Calendar nowTime = Calendar.getInstance();
        nowTime.add(Calendar.MINUTE,30);
        Date expiresDate = nowTime.getTime();
        return JWT.create().withAudience(user.getId().toString())   //签发对象
                .withIssuedAt(new Date())    //发行时间
                .withExpiresAt(expiresDate)  //有效时间
                .withClaim("mobile", user.getMobile())    //claim,携带信息,可自由设定内容和数量
                .sign(Algorithm.HMAC256(SecretConstant.BASE64SECRET));   //加密
    }


校验jwt


只要不抛出异常,则认为jwt还未过期


        DecodedJWT jwt = null;
        try {
            JWTVerifier verifier = JWT.require(Algorithm.HMAC256(SecretConstant.BASE64SECRET)).build();
            jwt = verifier.verify(token);
        } catch (Exception e) {
            //效验失败
        }


刷新jwt


其实就是生成一个新的token


其他用法


也有把token当成session用的,比如生成一个不过期的token,然后存到redis,使用redis做过期等的校验,这种方式还有一个好处就是,当token刷新,之前的token可以很方便的失效,因为只有在redis中存在的token才算是有效的token


总结


jwt只是所有解决方案中的一种,在清楚优缺点的情况下,选择适合当前项目的鉴权方式就可以。


目录
相关文章
|
3月前
|
SQL Java 测试技术
在Spring boot中 使用JWT和过滤器实现登录认证
在Spring boot中 使用JWT和过滤器实现登录认证
218 0
|
22天前
|
JSON 安全 算法
|
22天前
|
存储 安全 Java
|
1月前
|
JSON NoSQL Java
springBoot:jwt&redis&文件操作&常见请求错误代码&参数注解 (九)
该文档涵盖JWT(JSON Web Token)的组成、依赖、工具类创建及拦截器配置,并介绍了Redis的依赖配置与文件操作相关功能,包括文件上传、下载、删除及批量删除的方法。同时,文档还列举了常见的HTTP请求错误代码及其含义,并详细解释了@RequestParam与@PathVariable等参数注解的区别与用法。
|
12天前
|
JavaScript NoSQL Java
CC-ADMIN后台简介一个基于 Spring Boot 2.1.3 、SpringBootMybatis plus、JWT、Shiro、Redis、Vue quasar 的前后端分离的后台管理系统
CC-ADMIN后台简介一个基于 Spring Boot 2.1.3 、SpringBootMybatis plus、JWT、Shiro、Redis、Vue quasar 的前后端分离的后台管理系统
28 0
|
1月前
|
存储 JSON 算法
JWT令牌基础教程 全方位带你剖析JWT令牌,在Springboot中使用JWT技术体系,完成拦截器的实现 Interceptor (后附源码)
文章介绍了JWT令牌的基础教程,包括其应用场景、组成部分、生成和校验方法,并在Springboot中使用JWT技术体系完成拦截器的实现。
61 0
JWT令牌基础教程 全方位带你剖析JWT令牌,在Springboot中使用JWT技术体系,完成拦截器的实现 Interceptor (后附源码)
|
3月前
|
NoSQL 关系型数据库 MySQL
SpringBoot 集成 SpringSecurity + MySQL + JWT 附源码,废话不多直接盘
SpringBoot 集成 SpringSecurity + MySQL + JWT 附源码,废话不多直接盘
138 2
|
6月前
|
安全 数据安全/隐私保护
Springboot+Spring security +jwt认证+动态授权
Springboot+Spring security +jwt认证+动态授权
206 0
|
4月前
|
JSON 安全 Java
使用Spring Boot和JWT实现用户认证
使用Spring Boot和JWT实现用户认证

热门文章

最新文章