springboot實現(xiàn)token驗證登陸狀態(tài)的示例代碼
更新時間:2024年07月19日 08:39:54 作者:溫正實
本文主要介紹了spring?boot?實現(xiàn)token驗證登陸狀態(tài),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
1、添加maven依賴到pom.xml
<dependency> <groupId>io.jsonwebtoken</groupId> <artifactId>jjwt-api</artifactId> <version>0.11.5</version> </dependency> <dependency> <groupId>io.jsonwebtoken</groupId> <artifactId>jjwt-impl</artifactId> <version>0.11.5</version> </dependency> <dependency> <groupId>io.jsonwebtoken</groupId> <artifactId>jjwt-gson</artifactId> <version>0.11.5</version> </dependency>
2、寫個持久工具類
package com.scxhgh.scxhgh.token_session; import io.jsonwebtoken.Claims; import io.jsonwebtoken.Jwts; import io.jsonwebtoken.SignatureAlgorithm; import io.jsonwebtoken.security.Keys; import org.springframework.stereotype.Component; import java.security.Key; import java.util.Date; @Component public class JwtUtil { // // <dependency> // <groupId>io.jsonwebtoken</groupId> // <artifactId>jjwt-api</artifactId> // <version>0.11.5</version> // </dependency> // <dependency> // <groupId>io.jsonwebtoken</groupId> // <artifactId>jjwt-impl</artifactId> // <version>0.11.5</version> // </dependency> // // // <dependency> // <groupId>io.jsonwebtoken</groupId> // <artifactId>jjwt-gson</artifactId> // <version>0.11.5</version> // </dependency> private final String secretKey = "dshhdshissajsakpxfksxxz"; // 用于簽署和驗證令牌的密鑰,請?zhí)鎿Q為自己的密鑰 private final Key key = Keys.hmacShaKeyFor(secretKey.getBytes()); private final long validityInMilliseconds = 3600000; // 令牌有效期一小時 // private final long validityInMilliseconds = 60000; // 令牌有效期一分鐘 public String generateToken(String username) { Date now = new Date(); Date validity = new Date(now.getTime() + validityInMilliseconds); return Jwts.builder() .setSubject(username) .setIssuedAt(now) .setExpiration(validity) .signWith(key, SignatureAlgorithm.HS256) .compact(); } public String getUsernameFromToken(String token) { Claims claims = Jwts.parserBuilder() .setSigningKey(key) .build() .parseClaimsJws(token) .getBody(); return claims.getSubject(); } public boolean validateToken(String token) { try { Jwts.parserBuilder() .setSigningKey(key) .build() .parseClaimsJws(token); return true; } catch (Exception e) { return false; } } }
3、啟動服務器測試下,寫個controller和html,客戶端請求獲取token
controller(生成token 與驗證 token):
package com.scxhgh.scxhgh.token_session; import org.springframework.web.bind.annotation.*; @RestController @RequestMapping("/api") public class UserController { private final JwtUtil jwtUtil; public UserController(JwtUtil jwtUtil) { this.jwtUtil = jwtUtil; } // 生成token @PostMapping("/login_token") public String login(@RequestBody UserLoginRequest request) { // 在實際應用中,你可以驗證用戶名和密碼,然后生成令牌 // 這里只是一個簡單的示例,假設用戶名有效 String username = request.getUsername(); String token = jwtUtil.generateToken(username); return token; } // 驗證token @GetMapping("/user") public String getUserInfo(@RequestHeader("Authorization") String token) { if (jwtUtil.validateToken(token)) { String username = jwtUtil.getUsernameFromToken(token); return "Hello, " + username + "!"; } else { return "Invalid token"; } } }
html (請求token)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Login Page</title> </head> <body> <h1>Login Page</h1> <form id="login-form"> <label for="username">Username:</label> <input type="text" id="username" name="username" required><br><br> <label for="password">Password:</label> <input type="password" id="password" name="password" required><br><br> <button type="button" onclick="login()">Login</button> </form> <div id="token-info" style="display: none;"> <h2>Token Information</h2> <p id="token-content"></p> </div> <script> function login() { const username = document.getElementById('username').value; const password = document.getElementById('password').value; // 發(fā)送登錄請求到后端 fetch('/api/login_token', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ username, password }) }) .then(response => response.text()) .then(token => { // 顯示令牌信息 document.getElementById('token-info').style.display = 'block'; document.getElementById('token-content').textContent = 'Token: ' + token; }) .catch(error => { console.error('Login failed:', error); }); } </script> </body> </html>
到此這篇關于springboot實現(xiàn)token驗證登陸狀態(tài)的示例代碼的文章就介紹到這了,更多相關springboot token驗證登陸 內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
您可能感興趣的文章:
- SpringBoot整合JWT(JSON?Web?Token)生成token與驗證的流程及示例
- springboot+shiro+jwtsession和token進行身份驗證和授權
- SpringBoot集成JWT實現(xiàn)Token登錄驗證的示例代碼
- SpringBoot登錄驗證token攔截器的實現(xiàn)
- 實戰(zhàn)SpringBoot集成JWT實現(xiàn)token驗證
- Springboot 如何實現(xiàn)filter攔截token驗證和跨域
- SpringBoot整合JWT框架,解決Token跨域驗證問題
- SpringBoot集成JWT實現(xiàn)token驗證的流程
- SpringBoot下token短信驗證登入登出權限操作(token存放redis,ali短信接口)
- Spring boot+VUE實現(xiàn)token驗證的示例代碼
相關文章
在已經(jīng)使用mybatis的項目里引入mybatis-plus,結果不能共存的解決
這篇文章主要介紹了在已經(jīng)使用mybatis的項目里引入mybatis-plus,結果不能共存的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-03-03