最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解基于JWT的springboot權(quán)限驗(yàn)證技術(shù)實(shí)現(xiàn)

 更新時(shí)間:2020年11月05日 14:27:06   作者:Tyler Yue  
這篇文章主要介紹了詳解基于JWT的springboot權(quán)限驗(yàn)證技術(shù)實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

JWT簡介

Json Web Token(JWT):JSON網(wǎng)絡(luò)令牌,是為了在網(wǎng)絡(luò)應(yīng)用環(huán)境間傳遞聲明而制定的一種基于JSON的開放標(biāo)準(zhǔn)((RFC 7519)。JWT是一個(gè)輕便的安全跨平臺傳輸格式,定義了一個(gè)緊湊的自包含的方式用于通信雙方之間以 JSON 對象行使安全的傳遞信息。因?yàn)閿?shù)字簽名的存在,這些信息是可信的。

實(shí)現(xiàn)步驟:

環(huán)境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下創(chuàng)建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下創(chuàng)建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;

/**
 * 用來生成簽名,校驗(yàn)簽名,通過簽名
 */
public class JwtUtils {
  //令牌有效時(shí)間
  private final static long EXPIRE_TIME=5*60*1000;
  //密鑰
  private final static String SECRECT="Tyler_Yue_key";
  /**
   * 創(chuàng)建令牌
   */
  public static String sign(String userId){
    //構(gòu)建失效時(shí)鐘
    Date exipre_date = new Date(System.currentTimeMillis() + EXPIRE_TIME);
    //創(chuàng)建令牌
    JWTCreator.Builder builder = JWT.create();
    //給jwt令牌playload中放入發(fā)令牌放的用戶
    //給userid用戶發(fā)令牌
    builder.withAudience(userId);
    //設(shè)置令牌失效時(shí)間
    builder.withExpiresAt(exipre_date);
    //對令牌密鑰進(jìn)行加密
    Algorithm algorithm = Algorithm.HMAC256(SECRECT);
    String sign = builder.sign(algorithm);
    return sign;//返回令牌
  }
  /**
   * 驗(yàn)證令牌
   */
  public static boolean verifyToken(String token){

    try {
      //生成校驗(yàn)器
      Algorithm algorithm = Algorithm.HMAC256(SECRECT);
      //校驗(yàn)
      JWTVerifier build = JWT.require(algorithm).build();
      //無異常則校驗(yàn)成功
      return true;
    } catch (Exception e) {
      throw new RuntimeException("令牌過期");
    }
   
  }
}

4、在src下新建vo包

封裝一個(gè)返回用戶帶令牌的 對象

package com.qf.tyleryue_one.vo;

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

/**
 * 封裝一個(gè)返回 含令牌的用戶對象
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
public class TokenVo {
  //用戶名
  private String usernaem;
  //令牌名
  private String token;
}

5、舉例controller層用戶登錄業(yè)務(wù)登錄帶令牌

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;

/**
 * 登錄業(yè)務(wù)
 */
@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())){
        //密碼匹配,發(fā)放令牌
        ///隨機(jī)生成字符串未userid
        String userid = UUID.randomUUID().toString();
        String token = JwtUtils.sign(userid);
        //封裝令牌對象
        TokenVo tokenVo = new TokenVo(vueUser.getUsername(), token);
        return new Msg(200,"登錄成功,令牌已發(fā)放",tokenVo);

      }else {
        return new Msg(403,"密碼錯(cuò)誤",null);
      }
    }else {
      return new Msg(403,"用戶不存在",null);
    }
  }
}

到此這篇關(guān)于詳解基于JWT的springboot權(quán)限驗(yàn)證技術(shù)實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)springboot JWT權(quán)限驗(yàn)證內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • spring boot 開發(fā)soap webservice的實(shí)現(xiàn)代碼

    spring boot 開發(fā)soap webservice的實(shí)現(xiàn)代碼

    這篇文章主要介紹了spring boot 開發(fā)soap webservice的實(shí)現(xiàn)代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2019-01-01
  • SSH框架網(wǎng)上商城項(xiàng)目第30戰(zhàn)之項(xiàng)目總結(jié)(附源碼下載地址)

    SSH框架網(wǎng)上商城項(xiàng)目第30戰(zhàn)之項(xiàng)目總結(jié)(附源碼下載地址)

    這篇文章主要介紹了SSH框架網(wǎng)上商城項(xiàng)目第30戰(zhàn)之項(xiàng)目總結(jié),并附源碼下載地址,感興趣的小伙伴們可以參考一下
    2016-06-06
  • SpringBoot實(shí)現(xiàn)轉(zhuǎn)頁功能

    SpringBoot實(shí)現(xiàn)轉(zhuǎn)頁功能

    這篇文章主要介紹了SpringBoot實(shí)現(xiàn)轉(zhuǎn)頁功能,頁面的跳轉(zhuǎn)在web開發(fā)中是經(jīng)常用的基礎(chǔ)功能,感興趣想要詳細(xì)了解可以閱讀下文,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值
    2023-05-05
  • 如何解決java:錯(cuò)誤:無效的源發(fā)行版:17問題

    如何解決java:錯(cuò)誤:無效的源發(fā)行版:17問題

    這篇文章主要介紹了如何解決java:錯(cuò)誤:無效的源發(fā)行版:17問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • Mybatis之collection標(biāo)簽中javaType和ofType屬性的區(qū)別說明

    Mybatis之collection標(biāo)簽中javaType和ofType屬性的區(qū)別說明

    這篇文章主要介紹了Mybatis之collection標(biāo)簽中javaType和ofType屬性的區(qū)別說明,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • java中Lamda表達(dá)式講解

    java中Lamda表達(dá)式講解

    本文詳細(xì)講解了java中的Lamda表達(dá)式,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-12-12
  • swagger?@ApiModel添加實(shí)體類不生效的解決

    swagger?@ApiModel添加實(shí)體類不生效的解決

    這篇文章主要介紹了swagger?@ApiModel添加實(shí)體類不生效的解決方案,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。
    2022-01-01
  • 最新評論

    安国市| 石城县| 睢宁县| 清水县| 河曲县| 长泰县| 永仁县| 南木林县| 琼中| 会同县| 安溪县| 常德市| 辉县市| 华宁县| 巩留县| 平乡县| 河津市| 辽阳市| 乌拉特后旗| 德保县| 濮阳市| 清丰县| 宁津县| 佳木斯市| 苍溪县| 赤水市| 益阳市| 郸城县| 罗定市| 浦江县| 乌海市| 新巴尔虎左旗| 抚顺市| 和静县| 四会市| 阳城县| 定西市| 建瓯市| 怀仁县| 全州县| 湟源县|