springboot整合jwt实现token,简明笔记

这篇具有很好参考价值的文章主要介绍了springboot整合jwt实现token,简明笔记。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、什么是JWT

  • JWT(JSON Web Token)是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准。

  • 它将用户信息加密到token里,服务器不保存任何用户信息。服务器通过使用保存的密钥验证token的正确性,只要正确即通过验证;应用场景如用户登录。

  • JWT详细讲解请见 github:https://github.com/jwtk/jjwt

1.1传统Cookie+Session与JWT对比

① 在传统的用户登录认证中,因为http是无状态的,所以都是采用session方式。用户登录成功,服务端会保证一个session,当然会给客户端一个sessionId,客户端会把sessionId保存在cookie中,每次请求都会携带这个sessionId。

cookie+session这种模式通常是保存在内存中,而且服务从单服务到多服务会面临的session共享问题,随着用户量的增多,开销就会越大。而JWT不是这样的,只需要服务端生成token,客户端保存这个token,每次请求携带这个token,服务端认证解析就可。

② JWT方式校验方式更加简单便捷化,无需通过redis缓存,而是直接根据token取出保存的用户信息,以及对token可用性校验,单点登录,验证token更为简单。

1.2 JWT的组成

三部分:

  • 第一部分为头部(header)
  • 第二部分我们称其为载荷(payload)
  • 第三部分是签证(signature) 由前两部分组成
    各部分之间,用.分隔。

例如:

KV1QiLCJhbGciOiJIUzUxMiJ9.eyJzdWIiiwiaWF0IjoxNTY1NTk3MDUzLCJleHAiOjE1NjU2MDA2NTN9.afw5WFm-TwZltGWb1Xs6oBEk5QdaLzlHxDM73IOyeKPF_iN1bLvDAlB7UnSu-Z-Zs

2、引入依赖

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

3、编写工具类

编写工具类,静态方法,便于调用:文章来源地址https://www.toymoban.com/news/detail-495667.html

import com.auth0.jwt.JWT;
import com.auth0.jwt.algorithms.Algorithm;
import com.auth0.jwt.interfaces.DecodedJWT;
import java.util.Calendar;



public class JwtUitls {
    //token超时变量,N(秒)后
    public static final int TOKEN_TIMEOUT = 60*60*1;
    //  密钥
    public static final String APP_SECRET = "xxx@#$%^&dong";

    //生成token方法:传入用户名、用户ID 作为payload写入,便于后期解析
    public static String createToken(int id,String name) {
        Calendar instance=Calendar.getInstance();
        instance.add(Calendar.SECOND,TOKEN_TIMEOUT);
        String token=JWT.create()
                        .withClaim("uid",id)        //payload,写入变量,用户ID
                        .withClaim("uname",name)  //payload,写入变量,用户名
                        .withExpiresAt(instance.getTime())   //设置过期
                        .sign(Algorithm.HMAC256(APP_SECRET));//签名及算法
        return token;
    }

    //验证token合法性
    public static DecodedJWT verify(String token){
        // 此处如果没有出异常,说明传入token合法且未过期
        DecodedJWT verify=JWT.require(Algorithm.HMAC256(APP_SECRET)).build().verify(token);
        return verify;
    }

    public static DecodedJWT getTokenInfo(String token){

        try {
            DecodedJWT verify=JWT.require(Algorithm.HMAC256(APP_SECRET)).build().verify(token);
            return verify;
        }catch (Exception e){
            return null;
        } 
    }

}

4、编写拦截器

import com.auth0.jwt.exceptions.AlgorithmMismatchException;
import com.auth0.jwt.exceptions.SignatureVerificationException;
import com.auth0.jwt.exceptions.TokenExpiredException;
import com.fd.demo.Uitls.JwtUitls;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.web.servlet.HandlerInterceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.HashMap;
import java.util.Map;

public class JwtInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {

        //获取请求头中传过来的token
        String token = request.getHeader("X-Token");
        Map<String, Object> map = new HashMap<>();
        try {
            //校验token
            JwtUitls.verify(token);
            return true;// 放行 令牌正常才会执行到这里
        } catch (SignatureVerificationException e) {
            //无效签名
            map.put("msg", "无效签名");
        } catch (TokenExpiredException e) {
            //过期
            map.put("msg", "token过期");
        } catch (AlgorithmMismatchException e) {
            //算法不一致
            map.put("msg", "算法不一致");
        } catch (Exception e) {
            //token无效
            map.put("msg", "无效token...");
        }
        map.put("code", 501);

        // 把返回的map封装为JSON
        String json = new ObjectMapper().writeValueAsString(map);
        //设置响应类型和编码
        response.setContentType("application/json;charset=UTF-8");
        //返回响应
        response.getWriter().println(json);

        return false;
    }
}

5、配置拦截器(配置类)

 
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
public class InterceptorConfig implements WebMvcConfigurer {

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        //添加拦截器方法 传入我们自己的拦截器  这里的拦截器,是使用的JWT定义的拦截器
        registry.addInterceptor(new JwtInterceptor())
                .addPathPatterns("/**") //拦截规则 所有
                .excludePathPatterns("/api/user/login") //例外规则
                .excludePathPatterns("/swagger-resources/**") //下面的例外规则,是swagger的
                .excludePathPatterns("/webjars/**")
                .excludePathPatterns("/v2/**")
                .excludePathPatterns("/swagger-ui.html/**");
    }
}

6、创建token

//登录逻辑 略。。
//登录验证成功
 String token = JwtUitls.createToken(用户id, 用户名);
 //返回创建好的token

7、校验token

//....
//获取请求来的token,调用工具类方法
  DecodedJWT tokenInfo = JwtUitls.getTokenInfo(token);
        if (tokenInfo!=null){
            //token中解析payload
            Integer uid = tokenInfo.getClaim("uid").asInt();
            String uname = tokenInfo.getClaim("uname").asString()
            }

到了这里,关于springboot整合jwt实现token,简明笔记的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Springboot实现websocket(连接前jwt验证token)

    用户连接服务器weksocket前,需经过jwt的token验证(token中包含账号信息),验证合法后,才可以于服务器正常交互。 一、配置依赖(pom.xml) 二、因为springboot的websocket连接时不会显示header信息,也就无法拿到cookie中的token信息,需要在连接前处理,新建一个WebSocketConfig.class,在

    2024年02月03日
    浏览(83)
  • springBoot JWT实现websocket的token登录拦截认证

    功能:所有关于websocket的请求必须登录,实现websocket需要登录后才可使用,不登录不能建立连接。 后台spring security配置添加websocket的请求可以匿名访问,关于websocket的请求不要认证就可以随意访问,去除匿名访问后,前端在与websocket建立链接无法在请求头里直接加入Authoriz

    2024年02月13日
    浏览(49)
  • 在springBoot中使用JWT实现1.生成token,2.接收前端token进行身份认证,3.通过token获取对象信息

    第一步:引入依赖 第二步:创建工具类 在until包下创建TokenUntil类,用于生成token 利用id,和password作为参数生成token JWt为这个包下的对象 第三步:token使用 在向前端返回的数据对象中添加token属性  是serve层中调用工具类方法将生成的token放到返回的数据中 注意:这里获取到

    2024年02月04日
    浏览(69)
  • 【Sa-Token】SpringBoot 整合 Sa-Token 快速实现 API 接口签名安全校验

    在涉及跨系统接口调用时,我们容易碰到以下安全问题: 请求身份被伪造 请求参数被篡改 请求被抓包,然后重放攻击 sa-token api-sign 模块将帮你轻松解决以上难题。(此插件是内嵌到 sa-token-core 核心包中的模块,开发者无需再次引入其它依赖,插件直接可用) 假设我们有如

    2024年02月17日
    浏览(47)
  • 什么是JWT(JSON Web Token)?

    JWT(JSON Web Token)是一种开放标准(RFC 7519),用于在网络应用间传递信息的安全传输方式。它通过数字签名来验证信息的合法性,并且具有自包含性,即它包含了足够的信息以供验证和识别。 JWT通常由三部分组成:头部(Header)、载荷(Payload)和签名(Signature)。 1. 头部(

    2024年02月12日
    浏览(48)
  • springboot整合Sa-Token实现登录认证和权限校验(万字长文)

    目前在国内的后端开发中,常用的安全框架有spring security、shiro。现在,介绍一款由国人开发的安全框架Sa-Token。这个框架完全由国人开发,所提供的Api文档和一些设置都是比较符合国人的开发习惯的,本次就来介绍一下如何在spring boot框架中整合Sa-Token框架,以实现我们最常

    2024年04月27日
    浏览(44)
  • 【JWT】SpringBoot+微信小程序根据指定参数生成Token、更新Token、判断Token是否已经过期、封装wx.request请求更新Token并判断Token是否过期

    微信小程序js代码 微信小程序点击登录按钮调用该方法 java后端代码 getUserCode方法为获取用户的唯一标识openId userLogin方法用于用户授权登录并获取Token userLogin实现类方法 封装了wx的request请求,每次发起请求的时候都走一遍更新Token的接口/user/updateTokenTime,如果接口返回offlin

    2024年02月04日
    浏览(53)
  • Jwt(Json web token)——使用token的权限验证方法 & 用户+角色+权限表设计 & SpringBoot项目应用

    1.认证鉴权服务,注册中心,认证中心,鉴权中心; 2.用户,角色,权限表设计,数据库视图的使用; 3.项目中的应用,使用自定义注解+拦截器; 4.枚举类型的json化, @JsonFormat(shape = JsonFormat.Shape.OBJECT) @Getter https://gitee.com/pet365/springboot-privs-token 用户和权限之间关系(多对多

    2024年02月14日
    浏览(75)
  • 使用JWT生成token实现权限验证

            点击登录按钮,后端验证账号密码是否通过,如果通过则生成token,把token发送给前端,前端保存到cookie(前后端分离是不能使用保存session,因为每次发送ajax请求响应后都会断开服务器,就会导致session生命周期就销毁掉,然后再发送请求时再重新连接服务器,s

    2023年04月08日
    浏览(56)
  • 3-2. SpringBoot项目集成【用户身份认证】实战 【实战核心篇】基于JWT生成和校验Token

    书接上文 技术选型篇,我们做了【用户身份认证】的技术选型说明,对基于 Session、Token、JWT 的方案进行了详细的对比分析,详细说明了它们都是什么和各自的优缺点!这些是实战的基础,还没看过的同学,建议先看上文。最终采用的是目前流行的 基于JWT的Token用户身份认证

    2023年04月08日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包