springboot基於token實現登入認證

2021-10-09 03:01:18 字數 2936 閱讀 8576

最近因為專案需求,需採用token的方式實現登入認證,而不再使用session的方式登入,因而採用springboot整合jwt生成token實現登入認證。

1.首先新增jwt所需jar包

io.jsonwebtoken<

/groupid>

jjwt<

/artifactid>

0.7.0

<

/version>

<

/dependency>

2.接下來根據需要建乙個工具類jwtutils。

/**

* jwt工具類

*/@configurationproperties

(prefix =

)@component

public class jwtutils

//過期時間

date expiredate = new date

(nowdate.

gettime()

+ v *

1000);

return jwts.

builder()

.claim

("systype"

,st.

gettype()

).setheaderparam

("typ"

,"jwt").

setid

(companyid)

.setsubject

(userid)

.setissuedat

(nowdate)

.setexpiration

(expiredate)

.signwith

(signaturealgorithm.hs512, secret)

.compact()

;}/** * 解析token

*/public claims getclaimbytoken

(string token)

catch (exception e)

}/**

* token是否過期

* @return true:過期

*/public boolean istokenexpired

(date expiration)

public string getsecret()

public void

setsecret

(string secret)

public long

getexpire()

public void

setexpire

(long expire)

public string getheader()

public void

setheader

(string header)

這個工具類是通過jwt生成token以及對token的解析,這裡對token設定了過期時間,如果token解析不出或者說過期則會丟擲異常。

3.工具類寫好後,可以在登入時驗證完登入密碼生成token並返回給前端。(

"登入成功");

}4.當使用者請求介面時會在header中攜帶token,後端會對所有介面在前置***進行攔截,作用是對拿到的token進行解析,如果解析失敗,會丟擲signatureexception異常,如果解析成功,則不會攔截。

}5.可以對jwt進行全域性配置。

jwt:

# 加密秘鑰

secret: dfjlaer***

****

*# token有效時長,24小時,單位秒

expire:

86400

header: token`在這裡插入**片`

總結:

1.因為jwt生成token的無狀態性,以及便於傳輸,構成非常簡單,位元組占用很小,它不需要在服務端儲存

會話資訊, 所以它易於應用的擴充套件。

2.但一旦拿到訪問的token,就可直接訪問到伺服器,所以對於私鑰的保護非常重要。

基於restframework進行token驗證

一般情況下,進入到web 主頁都需要進行token或者其它驗證,不能在沒有登入的情況下可以檢視主頁的內容,在使用者輸入使用者名稱密碼後,進行校驗成功,後台會返回乙個token,用於用於下次訪問主頁或其它頁面進行使用者認證,一旦認證成功就可以訪問了。1 使用者獲取token 使用者向後台api傳送使用...

基於SpringBoot開發

使用idea配置springboot專案 專案結構 而 configuration 經常與 bean 組合使用,使用這兩個註解就可以建立乙個簡單的spring 配置類,可以用來替代相應的xml 配置檔案。enableautocon figuration 能夠自動配置spring 的上下文,猜測和配置...

spring security實現的token授權

在我的使用者密碼授權文章裡介紹了spring security的工作過程,不了解的同學,可以先看看使用者密碼授權這篇文章,在 使用者密碼授權模式裡,主要是通過乙個登陸頁進行授權,然後把授權物件寫到session裡,它主要用在mvc框架裡,而對於webapi來說,一般不會採用這種方式,對於webapi...