jwt的全稱是JSON Web Token;JSON Web
Token是一個開源標準(rfc7519),是一個輕量,攜帶着用戶信息的json
Object對象,安全的進行服務器端與客戶端交互;這個對象能夠校驗、信任,由於它由數字組成;
輕量:由於輕量,因此能夠更好地放在httpheader裏面,在服務器與客戶端之間快速交互
攜帶用戶信息:將用戶的重要信息:userId,userName等放在jwt當中,不用再次從數據庫當中獲取html
須要認證:用戶根據username、password登陸後,使用jwt返回一個token給客戶端,客戶端在請求的時候將token放在http
header當中給服務器端,服務器端校驗token的合法性,而後處理請求的responsejava
用戶信息被改變:web
由header、payload、sinature三部分組成,最終以xxx.yyy.zzz的形式拼接算法
header由兩部分組成:數據庫
payload裏面存放着用戶的信息,能夠使用claims進行復合拼裝,claims由已定義、public、private三部分組成json
payload當中的數據均可以由用戶自行設置安全
簽名,根據header、payload和一個用戶設置的密碼(secret),生成一個簽名,最後將header,payload,sinature拼接成xxx.yyy.zzz形式服務器
pom.xml裏面引入jwtui
<dependency> <groupId>io.jsonwebtoken</groupId> <artifactId>jjwt</artifactId> <version>0.7.0</version> </dependency>
public static void main(String[] args) { String secret = "password"; String userId = "zhangsan"; String userName = "張三"; // 輸出的jwt:eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ6aGFuZ3NhbiIsInVzZXJOYW1lIjoi5byg5LiJIn0.024kCUw4nodiXEdeOWtjWFn8u2eoh-DdfmLiXYgZs9g String jwt = Jwts.builder().setSubject(userId).signWith(SignatureAlgorithm.HS256, secret) .claim("userName", userName).compact(); System.out.println(jwt); // 客戶端將Jwt傳遞給服務器,服務器根據secret進行解密,能夠對jwt進行校驗,取數據 Jws<Claims> claims = Jwts.parser().setSigningKey(secret).parseClaimsJws(jwt); //header={alg=HS256},body={sub=zhangsan, userName=張三},signature=024kCUw4nodiXEdeOWtjWFn8u2eoh-DdfmLiXYgZs9g System.out.println(claims); }
由上面能夠看出claims裏面存放的數據由header、body、signature三部分組成加密