1. 程式人生 > >Spring Boot實戰之Filter實現使用JWT進行介面認證

Spring Boot實戰之Filter實現使用JWT進行介面認證

jwt(json web token)

使用者傳送按照約定,向服務端傳送 Header、Payload 和 Signature,幷包含認證資訊(密碼),驗證通過後服務端返回一個token,之後使用者使用該token作為登入憑證,適合於移動端和api

jwt使用流程


本文示例接上面幾篇文章中的程式碼進行編寫,請閱讀本文的同時可以參考前面幾篇文章

1、新增依賴庫jjwt,本文中構造jwt及解析jwt都使用了jjwt庫

  1. <dependency>
  2.     <groupId>io.jsonwebtoken
    </groupId>
  3.     <artifactId>jjwt</artifactId>
  4.     <version>0.6.0</version>
  5. </dependency>


2、新增登入獲取token時,所需要的認證資訊類LoginPara.java

  1. package com.xiaofangtech.sunt.jwt;  
  2. publicclass LoginPara {  
  3.     private String clientId;  
  4.     private String userName;  
  5.     private String password;  
  6.     private String captchaCode;  
  7.     private String captchaValue;  
  8.     public String getClientId() {  
  9.         return clientId;  
  10.     }  
  11.     publicvoid setClientId(String clientId) {  
  12.         this.clientId = clientId;  
  13.     }  
  14.     public String getUserName() {  
  15.         return userName;  
  16.     }  
  17.     publicvoid setUserName(String userName) {  
  18.         this.userName = userName;  
  19.     }  
  20.     public String getPassword() {  
  21.         return password;  
  22.     }  
  23.     publicvoid setPassword(String password) {  
  24.         this.password = password;  
  25.     }  
  26.     public String getCaptchaCode() {  
  27.         return captchaCode;  
  28.     }  
  29.     publicvoid setCaptchaCode(String captchaCode) {  
  30.         this.captchaCode = captchaCode;  
  31.     }  
  32.     public String getCaptchaValue() {  
  33.         return captchaValue;  
  34.     }  
  35.     publicvoid setCaptchaValue(String captchaValue) {  
  36.         this.captchaValue = captchaValue;  
  37.     }  
  38. }  
3、新增構造jwt及解析jwt的幫助類JwtHelper.java
  1. package com.xiaofangtech.sunt.jwt;  
  2. import java.security.Key;  
  3. import java.util.Date;  
  4. import javax.crypto.spec.SecretKeySpec;  
  5. import javax.xml.bind.DatatypeConverter;  
  6. import io.jsonwebtoken.Claims;  
  7. import io.jsonwebtoken.JwtBuilder;  
  8. import io.jsonwebtoken.Jwts;  
  9. import io.jsonwebtoken.SignatureAlgorithm;  
  10. publicclass JwtHelper {  
  11.     publicstatic Claims parseJWT(String jsonWebToken, String base64Security){  
  12.         try
  13.         {  
  14.             Claims claims = Jwts.parser()  
  15.                        .setSigningKey(DatatypeConverter.parseBase64Binary(base64Security))  
  16.                        .parseClaimsJws(jsonWebToken).getBody();  
  17.             return claims;  
  18.         }  
  19.         catch(Exception ex)  
  20.         {  
  21.             returnnull;  
  22.         }  
  23.     }  
  24.     publicstatic String createJWT(String name, String userId, String role,   
  25.             String audience, String issuer, long TTLMillis, String base64Security)   
  26.     {  
  27.         SignatureAlgorithm signatureAlgorithm = SignatureAlgorithm.HS256;  
  28.         long nowMillis = System.currentTimeMillis();  
  29.         Date now = new Date(nowMillis);  
  30.         //生成簽名金鑰
  31.         byte[] apiKeySecretBytes = DatatypeConverter.parseBase64Binary(base64Security);  
  32.         Key signingKey = new SecretKeySpec(apiKeySecretBytes, signatureAlgorithm.getJcaName());  
  33.           //新增構成JWT的引數
  34.         JwtBuilder builder = Jwts.builder().setHeaderParam("typ""JWT")  
  35.                                         .claim("role", role)  
  36.                                         .claim("unique_name", name)  
  37.                                         .claim("userid", userId)  
  38.                                         .setIssuer(issuer)  
  39.                                         .setAudience(audience)  
  40.                                         .signWith(signatureAlgorithm, signingKey);  
  41.          //新增Token過期時間
  42.         if (TTLMillis >= 0) {  
  43.             long expMillis = nowMillis + TTLMillis;  
  44.             Date exp = new Date(expMillis);  
  45.             builder.setExpiration(exp).setNotBefore(now);  
  46.         }  
  47.          //生成JWT
  48. 相關推薦

    Spring Boot實戰Filter實現使用JWT進行介面認證 jwt(json web token) 使用者傳送按照約定,向服務端傳送 Header、Payload 和 Signature,

    Spring Boot實戰之Filter實現使用JWT進行介面認證 jwt(json web token) 使用者傳送按照約定,向服務端傳送 Header、Payload 和 Signature,幷包含認證資訊(密碼),驗證通過後服務端返回一個token,之後使用者使用該

    Spring Boot實戰Filter實現使用JWT進行介面認證

    jwt(json web token) 使用者傳送按照約定,向服務端傳送 Header、Payload 和 Signature,幷包含認證資訊(密碼),驗證通過後服務端返回一個token,之後使用者使用該token作為登入憑證,適合於移動端和api j

    Spring Boot實戰逐行釋義HelloWorld

    runtime ica can pri source 訪問 exclude 這樣的 gradle 一、前言    研究Spring boot也有一小段時間了,最近會將研究東西整理一下給大家分享,大概會有10~20篇左右的博客,整個系列會以一個簡單的博客系統作為基礎,因為光

    Spring Boot實戰數據庫操作

    應該 element face 插入 sele run 方式 不同 pan   上篇文章中已經通過一個簡單的HelloWorld程序講解了Spring boot的基本原理和使用。本文主要講解如何通過spring boot來訪問數據庫,本文會演示三種方式來訪問數據庫,第一種是

    Spring Boot實戰匯出excel,並上傳存入Azure Storage

    Spring Boot實戰之匯出excel 本文使用Apache POI實現excel文件的匯出。 實現從資料庫讀取資料——生成excel——上傳到AzureStorage的流程 資料庫操作,及檔案上傳AzureStorage的流程可以參考之前的文章 http://blog

    spring boot實戰shiro session過期時間

    在spring boot內,設定session過期時間只需在application.properties內新增server.session.timeout配置即可。在整合shiro時發現,server.session.timeout設定為7200,但未到2小時就

    Spring Boot實戰匯出excel檔案。

    Spring Boot實戰之匯出excel本文使用Apache POI實現excel文件的匯出。 實現從資料庫讀取資料——生成excel——上傳到AzureStorage的流程資料庫操作,及檔案上傳AzureStorage的流程可以參考之前的文章http://blog.csdn.net/sun_t89/art

    spring boot實戰日期處理

    web開發中經常需要對日期進行操作,如字串日期轉long,long型轉字串,日期計算等,提取一個日期處理工具類,提供常見的日期操作可以讓開發更輕鬆一些。 毫秒(long)轉字串日期 對long型時間進行格式化在web開發中是很經常出現的一個操作,這裡主要

    spring boot實戰CSRF(跨站請求偽造)

    CSRF(Cross-site request forgery)跨站請求偽造,也被稱為“One Click Attack”或者Session Riding,通常縮寫為CSRF或者XSRF,是一種對網站的惡意利用。攻擊通過在授權使用者訪問的頁面中包含連結或者

    [Spring Boot實戰系列] - No.6 Springboot PageHelper實現後臺分頁

    Springboot PageHelper實現後臺分頁 PageHelper是一個很強大的分頁外掛,在Springboot的專案中,如果後臺突然需要改為分頁返回,甚至無需更改過多程式碼即可獲得分頁的結果。 1. 前期程式碼準備 建立一個springboot專案,配置資料庫以及

    Spring Boot 系列五:Spring Boot 通過devtools進行熱部署

    前面已經分享過四篇學習文章: 1、Spring Boot 系統之一:Spring Boot 入門 2、Spring Boot 系統之二:Spring Boot 修改預設埠號和context path 3、Spring Boot 系統之三:Spring Boot 整合JdbcTemplat

    Spring Boot Actuator 監控架構實戰使用

    本 Chat 作為 Logging 的姊妹篇,來和大家一起整體認識一下 Spring Boot Actuator 及其在實際工作的使用。有整體到區域性,有原理到實戰,一起來學習一下 Actuator 的正確使用姿勢。通過此篇 Chat 我們可以瞭解到如下內容: Spri

    Spring Boot 學習路——4 AOP註解方式實現列印日誌

    前言:據XX統計,四分之一的程式碼都是日誌有關,日誌對於定位和解決問題尤為重要,以前公司的編碼規範中要求介面必須在日誌中記錄入參和返回值以及關鍵程式碼,引數部分完全可以用Spring的AOP——面向切面來實現。什麼叫AOP?百度:AOP(Aspect Oriented Pro

    Spring Boot實戰系列《七》:實現登入國際化

    Spring Boot實戰系列《七》:實現登入國際化 1.前言 上一篇文章說的是人事管理系統的登入設計,在設計好了登入頁面login.html的時候,不知道大家有沒有看到下方有一箇中文,英文按鈕。一般逼格高點的專案,都是需要國際化的。 那麼我們本篇文章就說一下關於spring b

    Spring Boot 學習路——4.1 AOP註解方式實現列印日誌 詳解

    以下內容轉自:https://www.cnblogs.com/lixiang1993/p/7447853.html1.宣告一個切面類,並把這個切面類加入到IOC容器中@Component@Aspectpublic class LogAspect{    @Pointcut(v

    Spring Cloud實戰初級入門(四)— 利用Hystrix實現服務熔斷與服務監控

    close 哪些 cati status netflix turn 遠程倉庫 monitor mri 目錄 1.環境介紹 2.服務監控 2.1 加入依賴 2.2 修改配置文件 2.3 修改啟動文件 2.4 監控服務 2.5 小結 3. 利用hystrix實現消費服務熔斷

    Spring-boot】使用filter對request body引數進行校驗

    @Slf4j public class ParameterCheckServletRequestWrapper extends HttpServletRequestWrapper { private byte[] requestBody; pr

    spring進階 第一節 : spring boot 系列ssm專案實戰

    spring進階 第一節 : spring boot 系列之ssm專案實戰 1.spring boot 介紹 特點 - 建立獨立的spring容器應用程式 - 內嵌容器(tomcat,jetty,undertow)無需w

    Spring boot實戰專案整合阿里雲RocketMQ (非開源版)訊息佇列實現傳送普通訊息,延時訊息 --附程式碼

    一.為什麼選擇RocketMQ訊息佇列? 首先RocketMQ是阿里巴巴自研出來的,也已開源。其效能和穩定性從雙11就能看出來,借用阿里的一句官方介紹:歷年雙 11 購物狂歡節零點千萬級 TPS、萬億級資料洪峰,創造了全球最大的業務訊息併發以及流轉紀錄(日誌類訊息除外);  在始終保證高效能前提下

    Spring Boot 實戰紀實》需求管理

    ## 目錄 - [前言](https://www.52interview.com/book/36/0) - (思維篇)人人都是產品經理 - 1.需求文件 - 1.1 [需求管理](https://www.52interview.com/book/36/342) - 1.2 如何攥寫需求文