在編寫客服端時,爲實現用戶會話跟蹤常常使用session和 cookie 相結合的方法
首先服務其生成session 和身份憑證token
HttpSession session= request.getSession();
String token=UUID.randomUUID().toString().toUpperCase();
session.setAttribute("token", token);
向客服端寫入cookie
Cookie tokenCokie=new Cookie("token",token);
tokenCokie.setMaxAge(1000);
String Membertag="memberId";
Cookie memberCookie=new Cookie("Membertag",Membertag);
memberCookie.setMaxAge(1000);
response.addCookie(tokenCokie);
response.addCookie(memberCookie);
服務端驗證與會話跟蹤
String cMembertag=null;
String cToken=null;
Cookie[] cookies= request.getCookies();
if(cookies!=null){
for(Cookie cookie:cookies){
if(cookie.getName().equals("cookie")){
cToken=cookie.getValue();
}else if(cookie.getName().equals("Membertag")){
cMembertag=cookie.getValue();;
}
}
}
HttpSession Session = request.getSession(true);
if(cToken.equals(session.getAttribute("token"))){
//驗證通過
}else{
//驗證不通過
}
這樣便實現的客服端的回話跟蹤的實現
但是存在安全風險,
在客服端登入後由於token是不變的故可以使用Fidder等工具構建請求,重而實現不用使用客服端也可訪問服務。
爲解決這樣的問題,可以通過構建動態tonken實現具體如下
首先服務其生成session 和身份憑證token不變
HttpSession session= request.getSession();
String token=UUID.randomUUID().toString().toUpperCase();
session.setAttribute("token", token);
向客服端寫入cookie
獲取系統時間戳
String time= String.valueOf(System.currentTimeMillis());
設置客服端tokenCokie爲token+";"+time
token=token+";"+time
//對token進行加密自密鑰爲123456 之後將結果設置給客戶端的cokie
token=Decoder(token,"123456")
Cookie tokenCokie=new Cookie("token",token);
tokenCokie.setMaxAge(1000);
String Membertag="memberId";
Cookie memberCookie=new Cookie("Membertag",Membertag);
memberCookie.setMaxAge(1000);
response.addCookie(tokenCokie);
response.addCookie(memberCookie);
客戶端對收到的結果進行的 tokenCokie進行解密將的得到時間戳和token
並將 token+";"+客服端時間戳 的結果進過加密後設置在cookie 作爲下一次訪問使用
String cMembertag=null;
String cToken=null;
Cookie[] cookies= request.getCookies();
if(cookies!=null){
for(Cookie cookie:cookies){
if(cookie.getName().equals("cookie")){
//取出cToken
cToken=cookie.getValue();
//取出cToken中的token cToken的值爲(Token+";"+時間戳)
cToken=Token
}else if(cookie.getName().equals("Membertag")){
cMembertag=cookie.getValue();;
}
}
}
HttpSession Session = request.getSession(true);
if(cToken.equals(session.getAttribute("token"))){
//驗證通過
。。。。。。
爲客服端設置新的cookie 值爲 token =ession.getAttribute("token")+";"+時間戳
}else{
//驗證不通過
}
java服務端中客服端抓包與構建地址訪問問題
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章