登錄為啥需要鑒權(quán)?
登錄需要鑒權(quán)是為了保護系統(tǒng)的安全性和用戶的隱私。在一個 Web 應(yīng)用中,用戶需要提供一定的身份信息(例如用戶名和密碼)進行登錄,登錄后系統(tǒng)會為用戶生成一個身份令牌(例如 JWT Token)來標(biāo)識用戶的身份。
鑒權(quán)的主要目的是確保只有經(jīng)過身份驗證的用戶才能訪問系統(tǒng)的受限資源和功能。未經(jīng)鑒權(quán)的用戶不能訪問系統(tǒng)的敏感信息和功能,從而保護系統(tǒng)的數(shù)據(jù)和用戶的隱私。
為什么選擇JWT做登錄鑒權(quán)?
選擇 JWT(JSON Web Token)做登錄鑒權(quán)有以下幾個主要優(yōu)點:
1.無狀態(tài)
JWT 是無狀態(tài)的,即服務(wù)端不需要保存用戶的登錄狀態(tài)。所有的用戶信息都包含在 JWT 中,因此服務(wù)端不需要在后臺存儲用戶的登錄信息。這樣可以降低服務(wù)端的存儲壓力,也減少了服務(wù)端與客戶端之間的通信次數(shù),提高了系統(tǒng)的性能和可擴展性。
2.安全性
JWT 使用數(shù)字簽名來保證 Token 的完整性和安全性。服務(wù)端在生成 JWT 時使用密鑰對頭部和載荷進行簽名,客戶端在接收到 JWT 后,可以通過驗證簽名來判斷 Token 是否被篡改。這樣可以防止 Token 被偽造或篡改,增強了系統(tǒng)的安全性。
3.跨平臺支持
JWT 是基于 JSON 格式的標(biāo)準化令牌,可以在不同平臺之間方便地傳遞和解析??蛻舳丝梢詫?JWT 存儲在 Cookie、LocalStorage 或 SessionStorage 中,同時可以在移動端和 Web 端之間共享使用。
4.可擴展性
JWT 載荷部分可以自定義,可以存儲用戶的角色、權(quán)限、自定義字段等信息。這樣可以在 Token 中攜帶更多的用戶信息,減少多次查詢數(shù)據(jù)庫的開銷,提高系統(tǒng)的性能。
5.簡化權(quán)限管理
JWT 中可以包含用戶的角色和權(quán)限信息,這樣可以簡化權(quán)限管理邏輯。服務(wù)端可以根據(jù)用戶的角色和權(quán)限來控制用戶對不同資源的訪問權(quán)限,從而實現(xiàn)細粒度的權(quán)限控制。
JWT是token嗎?
是的,JWT(JSON Web Token)是一種 Token 的實現(xiàn)方式。Token 是一種用于身份驗證和授權(quán)的令牌,用于在客戶端和服務(wù)端之間傳遞用戶的身份信息。
JWT 是一種基于 JSON 的安全令牌,由三部分組成:頭部(Header)、載荷(Payload)和簽名(Signature)。這三部分分別使用 Base64 編碼,并用點號連接起來,形成一個字符串,即 JWT。文章來源:http://www.zghlxwxcb.cn/news/detail-641293.html
實現(xiàn)一個簡單的springboot攔截器token例子
1.創(chuàng)建攔截器類 TokenInterceptor.java:
import org.springframework.web.servlet.HandlerInterceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class TokenInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
// 在這里進行 Token 鑒權(quán)邏輯
// 獲取請求頭中的 Token
String token = request.getHeader("Authorization");
if (token == null || !token.startsWith("Bearer ")) {
response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
return false;
}
// 假設(shè)這里對 Token 進行驗證,驗證通過則放行,否則返回 401 未授權(quán)狀態(tài)碼
// 這里只是簡單示例,實際中可以根據(jù)業(yè)務(wù)需求來驗證 Token 的有效性
boolean isValidToken = validateToken(token.substring(7)); // 去除 "Bearer " 前綴
if (!isValidToken) {
response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
return false;
}
return true;
}
private boolean validateToken(String token) {
// 假設(shè)這里對 Token 進行驗證,驗證通過返回 true,否則返回 false
// 可以使用 JwtUtils 工具類來驗證 Token 的有效性
// 注意:在實際應(yīng)用中,需要根據(jù)業(yè)務(wù)需求和安全要求來驗證 Token
return true;
}
}
2.注冊攔截器:
在 Spring Boot 主類中注冊攔截器,使其生效:文章來源地址http://www.zghlxwxcb.cn/news/detail-641293.html
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@SpringBootApplication
public class MyApplication implements WebMvcConfigurer {
public static void main(String[] args) {
SpringApplication.run(MyApplication.class, args);
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new TokenInterceptor())
.addPathPatterns("/api/**"); // 攔截指定路徑的請求
}
}
3.創(chuàng)建一個簡單的 Controller
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class MyController {
@GetMapping("/api/hello")
public String hello() {
return "Hello, World!";
}
}
到了這里,關(guān)于Springboot實現(xiàn)簡單JWT登錄鑒權(quán)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!