一、登錄校驗(yàn)
- 問題:在未登錄情況下,我們也可以直接訪問部門管理、員工管理等功能。
- 由于瀏覽器與web服務(wù)器中的數(shù)據(jù)交互是通過HTTP協(xié)議的,而HTTP協(xié)議是無狀態(tài)的–即每個頁面中的請求和響應(yīng)都是獨(dú)立的,沒有狀態(tài)存在。
- 所以我們需要進(jìn)行登錄校驗(yàn):
1.登錄校驗(yàn)
- 每次訪問頁面的時候可以用
if...else...
來進(jìn)行判斷用戶是否登錄。但過程較為繁瑣,所以我們設(shè)置統(tǒng)一攔截。
二、統(tǒng)一攔截
1.登錄標(biāo)記
(1).會話技術(shù):
- 用戶登錄成功之后,每一次請求中,都可以獲取到該標(biāo)記。
- 會話:
- 用戶打開瀏覽器,訪問web服務(wù)器的資源,會話建立,直到有一方斷開連接,會話結(jié)束在一次會話中可以包含多次請求和響應(yīng)。
- 會話跟蹤:
- 一種維護(hù)瀏覽器狀態(tài)的方法,服務(wù)器需要識別多次請求是否來自于同一瀏覽器,以便在同一次會話的多次請求間共享數(shù)據(jù)。
(2).會話跟蹤方案:
- 客戶端Cookie(傳統(tǒng))
- 客戶端會話跟蹤技術(shù):
Cookie
。
import com.mannor.pojo.Result;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@Slf4j
@RestController
public class SessionController {
//設(shè)置cookie
@GetMapping("/c1")
public Result cookie(HttpServletResponse response) {
response.addCookie(new Cookie("login_username", "mannor"));//設(shè)置Cookie/響應(yīng)Cookie
return Result.success();
}
@GetMapping("/c2")
public Result cookie2(HttpServletRequest request) {
Cookie[] cookies = request.getCookies();//獲取所有的Cookie
for (Cookie cookie : cookies) {
if (cookie.getName().equals("login_username")) {//輸出name為 login_username 的cookie
System.out.println("login_username: " + cookie.getValue());
}
}
return Result.success();
}
}
優(yōu)點(diǎn):HTTP協(xié)議中支持
缺點(diǎn):1.移動端APP無法使用cookie不安全,2.用戶可以自己禁用,3.Cookiecookie不能跨域。
- 服務(wù)端Session(傳統(tǒng))
- 服務(wù)端會話跟蹤技術(shù):
Session
,基于cookie開發(fā)
import com.mannor.pojo.Result;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
@Slf4j
@RestController
public class SessionController {
//往HttpSession中存儲值
@GetMapping("/s1")
public Result session1(HttpSession session) {
log.info("attpSession-s1: {}", session.hashCode());
session.setAttribute("loginUser", "tom");//往session中存儲數(shù)據(jù)
return Result.success();
}
//從HttpSession中獲取值
@GetMapping("/s2")
public Result session2(HttpServletRequest request) {
HttpSession session = request.getSession();
log.info("HttpSession-s2:{}", session.hashCode());
Object loginUser = session.getAttribute("loginUser");//從session中獲取數(shù)據(jù)
log.info("loginUser: {}", loginUser);
return Result.success(loginUser);
}
}
優(yōu)點(diǎn):存儲在服務(wù)器,安全性高
缺點(diǎn):1.在服務(wù)器集群的情況下無法直接使用Session; 2.Cookie的缺點(diǎn)(基于Cookie開發(fā))。文章來源:http://www.zghlxwxcb.cn/news/detail-500543.html
- JWT令牌技術(shù) (主流技術(shù))
//具體相關(guān)內(nèi)容在下詳細(xì)介紹
優(yōu)點(diǎn):1.支持PC端和移動端 2.解決了集群環(huán)境下的認(rèn)證問題 3.減輕了服務(wù)器端存儲的壓力(不用存儲)。
缺點(diǎn):需要自己實(shí)現(xiàn)。文章來源地址http://www.zghlxwxcb.cn/news/detail-500543.html
到了這里,關(guān)于登錄校驗(yàn)原理過程和統(tǒng)一攔截技術(shù)(Cookie、Sesstion 和JWT令牌)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!