基于JWT的spring boot权限验证技术实现教程

 更新时间:2020年11月02日 09:07:50   作者:Tyler Yue  
这篇文章主要给大家介绍了关于基于JWT的spring boot权限验证技术实现的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

JWT简介

Json Web Token(JWT):JSON网络令牌,是为了在网络应用环境间传递声明而制定的一种基于JSON的开放标准((RFC 7519)。JWT是一个轻便的安全跨平台传输格式,定义了一个紧凑的自包含的方式用于通信双方之间以 JSON 对象行使安全的传递信息。因为数字签名的存在,这些信息是可信的。

实现步骤:

环境spring boot

1、添加jwt依赖

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

2、在src下创建annotation包

​ 新建自定义注解类 JwtToken

package com.qf.tyleryue_one.annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 自定义注解:方法前 表示方法需要拦截
 */
@Target({ElementType.METHOD,ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface JwtToken {
}

3、在src下创建utils包

​ 新建自定义JwtUtils工具类

package com.qf.tyleryue_one.utils;

import com.auth0.jwt.JWT;
import com.auth0.jwt.JWTCreator;
import com.auth0.jwt.JWTVerifier;
import com.auth0.jwt.algorithms.Algorithm;
import jdk.internal.org.objectweb.asm.TypeReference;

import java.util.Date;

/**
 * 用来生成签名,校验签名,通过签名
 */
public class JwtUtils {
  //令牌有效时间
  private final static long EXPIRE_TIME=5*60*1000;
  //密钥
  private final static String SECRECT="Tyler_Yue_key";
  /**
   * 创建令牌
   */
  public static String sign(String userId){
    //构建失效时钟
    Date exipre_date = new Date(System.currentTimeMillis() + EXPIRE_TIME);
    //创建令牌
    JWTCreator.Builder builder = JWT.create();
    //给jwt令牌playload中放入发令牌放的用户
    //给userid用户发令牌
    builder.withAudience(userId);
    //设置令牌失效时间
    builder.withExpiresAt(exipre_date);
    //对令牌密钥进行加密
    Algorithm algorithm = Algorithm.HMAC256(SECRECT);
    String sign = builder.sign(algorithm);
    return sign;//返回令牌
  }
  /**
   * 验证令牌
   */
  public static boolean verifyToken(String token){

    try {
      //生成校验器
      Algorithm algorithm = Algorithm.HMAC256(SECRECT);
      //校验
      JWTVerifier build = JWT.require(algorithm).build();
      //无异常则校验成功
      return true;
    } catch (Exception e) {
      throw new RuntimeException("令牌过期");
    }
   
  }
}

4、在src下新建vo包

封装一个返回用户带令牌的 对象

package com.qf.tyleryue_one.vo;

import com.alibaba.druid.filter.AutoLoad;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * 封装一个返回 含令牌的用户对象
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
public class TokenVo {
  //用户名
  private String usernaem;
  //令牌名
  private String token;
}

5、举例controller层用户登录业务登录带令牌

package com.qf.tyleryue_one.controller;

import com.qf.tyleryue_one.entity.VueUser;
import com.qf.tyleryue_one.service.VueUserService;
import com.qf.tyleryue_one.utils.JwtUtils;
import com.qf.tyleryue_one.vo.Msg;
import com.qf.tyleryue_one.vo.TokenVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;

import java.util.UUID;

/**
 * 登录业务
 */
@Controller
public class VueUserController {
  @Autowired
  private VueUserService vueUserService;

  @RequestMapping(value = "/dealLogin",method = RequestMethod.POST)
  @CrossOrigin
  @ResponseBody
  public Msg login(@RequestBody VueUser vueUser){
    VueUser vueUser1 = vueUserService.selectByUsername(vueUser.getUsername());

    if (vueUser1!=null){
      if (vueUser1.getPassword().equals(vueUser.getPassword())){
        //密码匹配,发放令牌
        ///随机生成字符串未userid
        String userid = UUID.randomUUID().toString();
        String token = JwtUtils.sign(userid);
        //封装令牌对象
        TokenVo tokenVo = new TokenVo(vueUser.getUsername(), token);
        return new Msg(200,"登录成功,令牌已发放",tokenVo);

      }else {
        return new Msg(403,"密码错误",null);
      }
    }else {
      return new Msg(403,"用户不存在",null);
    }
  }
}

总结

到此这篇关于基于JWT的spring boot权限验证技术实现教程的文章就介绍到这了,更多相关JWT springboot权限验证技术内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • SpringBoot使用H2嵌入式数据库的实例代码

    SpringBoot使用H2嵌入式数据库的实例代码

    本文通过实例代码给大家介绍了SpringBoot使用H2嵌入式数据库的相关知识,代码简单易懂,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2021-10-10
  • springboot项目配置多数据库连接的示例详解

    springboot项目配置多数据库连接的示例详解

    这篇文章主要介绍了springboot项目配置多数据库连接的示例,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2023-12-12
  • 通过Java连接SQL Server数据库的超详细操作流程

    通过Java连接SQL Server数据库的超详细操作流程

    java相对于其他语言(例如c,c++等)连接数据库要方便得多,那么如何连接呢?下面这篇文章主要给大家介绍了关于通过Java连接SQL Server数据库的超详细操作流程,需要的朋友可以参考下
    2023-03-03
  • Java实现简易版联网坦克对战小游戏(附源码)

    Java实现简易版联网坦克对战小游戏(附源码)

    这篇文章主要给大家介绍了关于Java实现简易版联网坦克对战小游戏的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用java具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-04-04
  • Java中的几种关键字的使用小结

    Java中的几种关键字的使用小结

    本文主要介绍了Java中的几种关键字的使用小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-06-06
  • 解读JDK1.8 默认使用什么垃圾收集器

    解读JDK1.8 默认使用什么垃圾收集器

    这篇文章主要介绍了解读JDK1.8 默认使用什么垃圾收集器,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-05-05
  • Java使用 try-with-resources 实现自动关闭资源的方法

    Java使用 try-with-resources 实现自动关闭资源的方法

    这篇文章主要介绍了Java使用 try-with-resources 实现自动关闭资源的方法,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-06-06
  • Spring Boot项目实战之拦截器与过滤器

    Spring Boot项目实战之拦截器与过滤器

    这篇文章主要介绍了Spring Boot项目实战之拦截器与过滤器,文中给大家详细介绍了springboot 拦截器和过滤器的基本概念,过滤器的配置,需要的朋友可以参考下
    2018-01-01
  • java 题解LeetCode38外观数列示例

    java 题解LeetCode38外观数列示例

    这篇文章主要为大家介绍了java 题解LeetCode38外观数列示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-08-08
  • 使用jekins自动构建部署java maven项目的方法步骤

    使用jekins自动构建部署java maven项目的方法步骤

    这篇文章主要介绍了使用jekins自动构建部署java maven项目的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01

最新评论