session和cookie都是用來存儲資訊的,差別是session是在伺服器端存儲資訊,而cookie則是在浏覽器端存儲資訊。
通常伺服器端存儲session,伺服器端存儲和擷取session,一般情況下是比較安全的,不排除黑客侵襲的情況下。不過cookie的話,容易因為cookie欺騙而導緻安全性問題。
當然了,現在因為token的流行和應用廣泛,使用cookie也不怕安全性問題。
将使用者資訊存儲到session中可以參考如下代碼:
@PostMapping(value = "/login",produces="application/json;charset=utf-8")
@SysLog(type="背景系統",action="登入功能",method="POST")
@ApiOperation(value="登入",httpMethod="POST",notes="若登入後token未過期則傳回原token,并按照預先定義的有效時間順延,若過期則生成新token,有效期預設10小時")
public JSONObject getLockPwd(@RequestParam String username, @RequestParam String password, HttpSession session,HttpServletResponse response) {
//接收前台參數
logger.info("使用者名:"+username);
logger.info("密碼:"+password);
//調用查詢邏輯
EntityWrapper<SysUser> wrapper = new EntityWrapper<SysUser>();
wrapper.eq("login_code", username);
SysUser user = userService.selectOne(wrapper);
JSONObject json = new JSONObject();
if(user != null && "0".equals(user.getStatus())) {
//擷取目前使用者
Subject subject = SecurityUtils.getSubject();
//根據前台傳的使用者名和密碼進行認證
UsernamePasswordToken token = new UsernamePasswordToken(username, password);
try {
//認證通過
subject.login(token);
String encode = Base64.encode(user.getUserCode());
//Cookie有效期預設為8小時
int time=28800;
//将Cookie加密為16進制字元串
CookieUtils.setCookie(response, "userCode", encode, time);
user.setLastLoginDate(DateUtil.date());
userService.updateById(user);
//将userCode放入session中儲存
session.setAttribute("userCode", user.getUserCode());
json.put("token", subject.getSession().getId());
json.put(CommonEnum.RETURN_CODE, "000000");
json.put(CommonEnum.RETURN_MSG, "登入成功");
} catch (IncorrectCredentialsException e) {
json.put(CommonEnum.RETURN_CODE, "111111");
json.put(CommonEnum.RETURN_MSG, "使用者名或密碼錯誤");
}catch (Exception e) {
json.put(CommonEnum.RETURN_CODE, "222222");
json.put(CommonEnum.RETURN_MSG, "特殊異常");
}
}else {
json.put(CommonEnum.RETURN_CODE, "500");
json.put(CommonEnum.RETURN_MSG, "使用者不存在");
}
return json;
}
關鍵就是session.setAttribute("userCode", user.getUserCode())這段代碼
關于Cookie加密或者是用Cookie存儲資訊和清除Cookie,可以參考我的這篇文章:
js之清除Cookie如果擷取session,參考如下代碼:
HttpServletRequest request = ((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getRequest();
//擷取session
String userCode = (String) request.getSession().getAttribute("userCode");